![]() |
AW: CSV Dateien einlesen
Zitat:
(logisch) fDelimiter := FormatSettings.ListSeparator (AnsiChar, Char) ...der .Listseparator ist ein (Char) muss doch einiges umgeschrieben werden. Ziehe mir gerade die Hilfe von E-XE3 heran. Ein Auszug sagt: Aufrufe von Read/ReadBuffer-Methoden von TStream Überprüfen Sie die Aufrufe von TStream.Read/ReadBuffer, wenn Strings oder Zeichen-Arrays verwendet werden. Sehen Sie sich das folgende Beispiel an: var S: string; L: Integer; Stream: TStream; Temp: AnsiString; begin // Vorhandener Code ist falsch, wenn String UnicodeString ist Stream.Read(L, SizeOf(Integer)); SetLength(S, L); Stream.Read(Pointer(S)^, L); // Richtig für Unicode-String-Daten Stream.Read(L, SizeOf(Integer)); SetLength(S, L); Stream.Read(Pointer(S)^, L * SizeOf(Char)); // <<-- Geben Sie die Puffergröße in Byte an // Richtig für Ansi-String-Daten Stream.Read(L, SizeOf(Integer)); SetLength(Temp, L); // <<-- Temporären AnsiString verwenden Stream.Read(Pointer(Temp)^, L * SizeOf(AnsiChar)); // <<-- Geben Sie die Puffergröße in Byte an S := Temp; // <<-- String auf Unicode erweitern end; |
AW: CSV Dateien einlesen
Zitat:
Der Listseperator ist ein Char was soll dann das "(Ansichar, Char)"? Irgendwann später wirst Du auch die Daten einlesen, da muß der Puffer entsprechend angepasst werden (
Delphi-Quellcode:
) soweit ganz richtig, aber was haben diese beiden sachen miteinander zu tun?
sizeof(char)
Und was ist wenn Du CSV-Dateien mit 16 und 8 Bit-Zeichen hast? Gruß K-H |
AW: CSV Dateien einlesen
Zitat:
das der fDelimiter=AnsiChar, und Listseperator=Char ist. (Darstellung war verwirrend, einfach vergessen)... Da ein einfaches Umschreiben in diesem Falle nicht möglich ist... |
AW: CSV Dateien einlesen
Aber ein Cast sollte doch funktionieren:
Delphi-Quellcode:
var
c: Ansichar; d: char; begin c := 'A'; d := Char(c); |
AW: CSV Dateien einlesen
Zitat:
dafür eine Menge andere Fehler. Es musste eine schnelle Lösung her. Habe das Ganze jetzt so gelöst... Liest "nur" die selbst gebastelten CSV-File. Also "Text";daten;"Text";Text;Daten
Delphi-Quellcode:
uses function Read_CSV(SG: TStringGrid; Dateiname: String): Boolean; . . procedure T_Zutaten.FormShow(Sender: TObject); var t: string; begin t:='C:\DB\Zutaten.csv'; Read_CSV (StringGrid1,t); end. . . // CSV File Einlesen =========================================================== function Read_CSV (SG: TStringGrid; Dateiname: String): Boolean; var OutputFile: TextFile; sOutputName: string; l: integer; c: integer; x,y: integer; s,t: string; begin // Startwerte Reihe StringGrid y:=-1; sOutputname:=Dateiname; AssignFile(OutputFile, sOutputName); Reset(OutputFile); try while not Eoln(outputFile) do begin x:=0; y:=y+1; SG.RowCount:=y+1; ReadLn(OutputFile, t); l:=length(t); s:=''; for c := 1 to l do begin if t[c]<> ';' then if t[c]<> '"' then s:=s+t[c]; // Trennzeichen gefunden if t[c] = ';' then begin if length(s)=0 then s:=' '; SG.Cells[x,y]:=s; s:=''; x:=x+1; if y=0 then SG.ColCount:=x; end; // Zeilen Ende if c = l then begin if length(s)=0 then s:=' '; SG.Cells[x,y]:=s; s:=''; x:=x+1; if y=0 then SG.ColCount:=x; end; end; end; finally CloseFile(OutputFile); Result:=True; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 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