Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeichenkette aus CSV-Datei mit mehr als 254 Zeichen (https://www.delphipraxis.net/14386-zeichenkette-aus-csv-datei-mit-mehr-als-254-zeichen.html)

eddy 8. Jan 2004 10:15


Zeichenkette aus CSV-Datei mit mehr als 254 Zeichen
 
Hallo Leute,

ich habe folgendes Problem:

Der Export einer XLS-Tabelle nach CSV soll eingelesen werden. (Kein Problem) Da die Tabelle aber sehr viele Spalten hat, haben einzelne Zeilen in CSV mehr als 254 Zeichen. Damit fehlt im nachfolgenden Quelltext von diesen Zeilen immer ein Stück.

Code:

var
  txf : TextFile;
begin
  ....
  AssignFile(txf, filename);
  Reset(txf);
  while not eof(txf) do begin
    readln(txf, s);
    // mache etwas sinnvolles mit den Daten
    i := length(s);
    if i > 254 then ShowMessage('Text größer als String'); <-- in diesem Fall gibt's Datenverlust
  end;
  CloseFile(txf);
  ....
end;
Hat jemand eine Lösung für mich?

mfg
eddy

galex 8. Jan 2004 11:21

Re: Zeichenkette aus CSV-Datei mit mehr als 254 Zeichen
 
Hallo.

Unter Delphi gibt es folgende Stringtypen:

ShortString: bis 255 Byte (Abwärtskompatibilität)
AnsiString: bis 2GB 8 Bit Zeichen
WideString: bis 2GB Unicode Zeichen

Bei {$H+} wird string als AnsiString genohmen,
bei {$H-} als ShortString.

Gruß
Galex

mark250678 8. Jan 2004 11:21

Re: Zeichenkette aus CSV-Datei mit mehr als 254 Zeichen
 
Hallo Eddy,

Du kannst mal versuchen s als AnsiString zu deklarieren anstatt als string. Kann das aber momentan leider nicht testen, da ich mit D7 arbeite. Da gibt es diese 255 Zeichenbeschränkung bei Strings nicht mehr.

Unter D5 hatte ich früher mal ein ähnliches Problem.

Schöne Grüße

Markus

eddy 8. Jan 2004 13:28

Re: Zeichenkette aus CSV-Datei mit mehr als 254 Zeichen
 
Hallo mark250678 und galex,

hab's probiert und funktioniert. s statt String als AnsiString definiert und schon klappt's auch mit den langen Zeilen.

WideString wurde mit folgender Beschwerde quitiert: Ungültiger Typ in Read/Readln Anweisung

Vielen Dank, Problem gelöst!

mfg
eddy

Brüggendiek 9. Jan 2004 00:18

Re: Zeichenkette aus CSV-Datei mit mehr als 254 Zeichen
 
Hallo Eddy!

Zitat:

Zitat von eddy
s statt String als AnsiString definiert und schon klappt's auch mit den langen Zeilen.

Offensichtlich hast Du Dein Delphi verstellt - ich habe D5 Standard und da sind Strings normalerweise AnsiString - die alten muß ist als ShortString oder String[anzahl] deklarieren.

Guck mal nach: Projekt - Optionen - Compiler: Ist bei Huge-Strings kein Haken?
Alternativ gibt es noch den Compiler-Schalter $H.

Den einzigen Sinn, den ShortStrings noch haben, ist die Verwendung in typisierten Dateien. Ansonsten verwende ich immer die normalen (Ansi)Strings.

Gruß

Dietmar Brüggendiek

Edit: immer diese TappsFauler

Rainer_Unger 9. Jan 2004 06:45

Re: Zeichenkette aus CSV-Datei mit mehr als 254 Zeichen
 
Hallo,

eine kurze Bemerkung zu "normal":

Unter Pascal ( in der ursprünglichen Definition ) sind String 255 Bytes lang. Alles Andere sind Sonderformate die Borland mit Delphi eingeführt hat.
Bei D5 ist die "Normaleinstellung" nach der Installation die 255 Byte Variante.

Rainer

Luckie 9. Jan 2004 06:55

Re: Zeichenkette aus CSV-Datei mit mehr als 254 Zeichen
 
Zitat:

Zitat von Rainer_Unger
Bei D5 ist die "Normaleinstellung" nach der Installation die 255 Byte Variante.

Das halte ich für ein Gerücht.

Vjay 9. Jan 2004 09:59

Re: Zeichenkette aus CSV-Datei mit mehr als 254 Zeichen
 
"Normal" bei Delphi ist (glaube ab Version 2) Ansistring und d.h. > 255.
Natürlich nicht, wenn ein Spielkind über die Einstellungen gegangen ist ;)

eddy 9. Jan 2004 11:18

Re: Zeichenkette aus CSV-Datei mit mehr als 254 Zeichen
 
Hallo Leute,

nach den vorangehenden Kommentaren noch folgende Ergänzungen:

@Brüggendiek: Haken ist gesetzt (bei Huge)

@alle: ich hab's noch mal mit string probiert und funktioniert auch, in überwachte Ausdrücke wird die Zeichenkette jetzt bis zum Ende angezeigt. Vermutlich hatte ich an einer anderen Stelle einen Fehler, den ich aber nicht mehr nachvollziehen kann.

Vielen Dank für Eure Tipp's

mfg
eddy


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz