Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DelimitedText // CSV (https://www.delphipraxis.net/60040-delimitedtext-csv.html)

schof 2. Jan 2006 09:59

Datenbank: access • Version: 2003 • Zugriff über: ADO

DelimitedText // CSV
 
Hi
ich habe hier eine Procedure zum auslesen von einer CSV und zum schreiben dieser Werte in eine Datenbank
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);    
  var    
    SL: TStringList;    
    i: Integer;    
    T: Textfile;    
    SInString: String;    

   
begin    
  if (<opendialog>.Execute) then begin
    SL := TStringList.Create;
    try
      AssignFile(T,<opendialog>.FileName);
      Reset(T);    
      while (not Eof(T)) do begin  
        ReadLn(T,SInString);
        SL.Delimiter := ';';
        SL.DelimitedText := SInString;
        <deinetabelle>.Append;
        for i := 0 to SL.Count-1 do
          <deinetabelle>.Fields[I].AsString := SL.Strings[i];
        <deinetabelle>.Post;
      end;
    finally
      SL.Free;
    end;
  end;
  CloseFile(T);
end;
ich hab mir das ergebnis befor ich in die tabelle schreibe mal in eine textfile kopieren lassen damit ich sehe, wo er teilt.
Mein Problem es funktioniert alles gut nur: er nimmt das Leerzeichen auch als delimiter wie kann ich das ändern

danke schon mal

schof 2. Jan 2006 10:52

Re: DelimitedText // CSV
 
so ich habe es erst mal durch char ersetzen gemacht. aber ich glaub das geht ziemlich auf die kosten der performance wenn ich dann mal 600000 datensätze reinladen will. hier der code
Delphi-Quellcode:
SInString := StringReplace(SInString, ' ', '~~', [rfReplaceAll, rfIgnoreCase]);
SL.Delimiter := ';';
SL.DelimitedText := SInString;
SL.Text := StringReplace(Sl.text, '~~', ' ', [rfReplaceAll, rfIgnoreCase]);

Hansi 2. Jan 2006 11:18

Re: DelimitedText // CSV
 
Hier mal ein anderes Bsp wie man so ein text datei auch auslesen kann:


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s:String;
  Url_WKN :String;
  Url_Kurs :String;
begin
  s:='710000.DE;32,92';
  Url_WKN:= Copy(s,1,Pos('.',s)-1);  // alles von S[7] bis S[;]-1 kopieren
  Delete(s,1,Pos(';',s));            // Jetzt alles von Anfang an bis incl. ";" löschen
  Url_Kurs:= Copy(s,1,Pos(';',s)-1);
  Delete(s,1,Pos(';',s));
end;
Vielleicht hilft dir das ja! ;)

Khabarakh 2. Jan 2006 11:23

Re: DelimitedText // CSV
 
@Hansi: Benutze lieber PosEx (bzw. einen Nachbau, wenn man nicht D7 oder höher besitzt) statt Delete, dann muss der Originalstring nicht verändert werden. Da schofs String wohl nicht gerade der kürzeste ist, spart das Einiges an Performance ein.

schof 2. Jan 2006 14:15

Re: DelimitedText // CSV
 
danke für den tip habs schon eingebaut :D ich weiss nicht ob es hier noch hergehört aber hat einer ahnung von csv parsen wenn nicht schreib ich mir so ein kleines programm kurz aber danke nochmal :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr.

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