![]() |
TStringlist splitten, neues problem
Hallo leute,
ich lade mir ein txt file in eine TStringList, und will diese werte dann in einer datenbank speichern. Die einzelnen Spalten sind durch ; getrennt
Delphi-Quellcode:
mir fehlt jetz irgendwie ein ansatz wie ich die einzelnen Zeilen durchlaufe und nach dem ;
procedure TForm1.Button1Click(Sender: TObject);
var TempList: TStrings; begin Templist := TStringlist.Create; with Templist do begin loadfromFile('C:\Datei.TXT'); try finally Templist.free; end; end; end; end. aufteile :wiejetzt: die ergebnisse werden dann mit
Delphi-Quellcode:
hoffentlich in die datenbank gespeichert.
insert into TABLE(FELD1, FELD2) VALUES ('wert1','wert2')
Ich hoff ihr verzeiht mir, aber ich bin neu in Delphi und grad am lernen. Gruß Michael |
Re: TStringlist nach ; splitten und in Interbase Speichern
Hai Michael80,
dafür brauchst Du zwei StringListen. Dann kannst Du mit der Eigenschaft DelimitedText arbeiten. In der ersten sind alle Zeilen aus deiner Datei. Der zweiten wird immer eine Zeile der ersten übergeben und endhält dann selber für jeden "Eintrag" eine Zeile. Mehr steht in der OH.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var mastersl : TStringList; detailsl : TStringList; ndx : Integer; // Laufvariable für Master begin mastersl := TStringList.Create; // Master StringList detailsl := TStringList.Create; // Detail StringList try detailsl.Delimiter := ';'; // Trennzeichen der Einträge pro Zeile mastersl.LoadFromFile('deinedatei.csv'); for ndx := 0 to Pred (mastersl.Count) do begin detailsl.Clear; detailsl.DelimitedText := mastersl.Strings[ndx]; with Query1 do begin Close; SQL.Text := 'INSERT INTO TABLE(FELD1, FELD2, FELD3) VALUES (:wert1,:wert2,:wert3)'; ParamCheck := True; ParamByName('wert1').AsString := detailsl.Strings[0]; ParamByName('wert2').AsString := detailsl.Strings[1]; ParamByName('wert3').AsString := detailsl.Strings[2]; ExecSQL; end; end; finally FreeAndNil (mastersl); FreeAndNil (detailsl); end; end; |
Re: TStringlist nach ; splitten und in Interbase Speichern
danke, werd ich sofort probieren! :dp:
--------------------------------------------------------------------- wunderbar, funktioniert einwandfrei :thuimb:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var mastersl : TStringList; detailsl : TStringList; ndx : Integer; // Laufvariable für Master begin mastersl := TStringList.Create; // Master StringList detailsl := TStringList.Create; // Detail StringList try detailsl.Delimiter := ','; // Trennzeichen der Einträge pro Zeile mastersl.LoadFromFile('C:\KUNDE.txt'); for ndx := 0 to Pred (mastersl.Count) do begin detailsl.Clear; detailsl.DelimitedText := mastersl.Strings[0]; detailsl.savetofile('c:\test.txt'); {with IBQuery1 do begin Close; SQL.Text := 'INSERT INTO KUNDENSTAMM(KDNR, ANREDE, VORNAME, NACHNAME, ZUSATZ, STRASSE,ORTSTEIL,PLZ,ORT,TELEFON,TELEFAX) VALUES (:wert1,:wert2,:wert3,:wert4,:wert5,:wert6,:wert7,:wert8,:wert9,:wert10,:wert11)'; ParamCheck := True; ParamByName('wert1').AsString := detailsl.Strings[0]; ParamByName('wert2').AsString := detailsl.Strings[1]; ParamByName('wert3').AsString := detailsl.Strings[2]; ParamByName('wert4').AsString := detailsl.Strings[3]; ParamByName('wert5').AsString := detailsl.Strings[4]; ParamByName('wert6').AsString := detailsl.Strings[5]; ParamByName('wert7').AsString := detailsl.Strings[6]; ParamByName('wert8').AsString := detailsl.Strings[7]; ParamByName('wert9').AsString := detailsl.Strings[8]; ParamByName('wert10').AsString := detailsl.Strings[9]; ParamByName('wert11').AsString := detailsl.Strings[10]; ExecSQL; end; IBTransaction1.Commit;} end; finally FreeAndNil (mastersl); FreeAndNil (detailsl); end; end; |
Re: TStringlist splitten, neues problem
zu früh gefreut, jetz hab ich mir meinen kundenstamm aufbereitet und wollte ihn einlesen,
dabei hab ich festgestellt, das er mir in detailsl auch eine neue zeile anfängt, wenn er im kundenstamm ein leerzeichen findet sprich er macht aus meine strasse 1 meine strasse 1 irgendjemand einen einfall an was das liegt? |
Re: TStringlist splitten, neues problem
Zitat:
in diesem Fall müssen die "Einträge" in der Datei in " eingeschlossen sein (oder ein beliebiges anderes Zeichen). Zitat:
Delphi-Quellcode:
detailsl.Delimiter := ','; // Trennzeichen der Einträge pro Zeile
detailsl.QuoteChar := '"'; // Quoting Zeichen. |
Re: TStringlist splitten, neues problem
das funktioniert aber nicht, weil das system das die daten auswirft, immer diesen aufbau generiert
das heißt ich muss ne funktion schreiben die immer vor und nach dem ; ein " einfügt, und die zeile dann an detailsl übergibt :wall: nu bin ich aber genausoweit wie vorher ... |
Re: TStringlist splitten, neues problem
Oder du versuchst es mal hiermit:
![]() Aufruf:
Delphi-Quellcode:
Beispiel
splitString(ZuZerlegendeZeile, ',', TDestStringlist);
Delphi-Quellcode:
var LLogList, LSplittedZeile: TStringlist;
LCount: Integer; begin LLogList := TStringlist.Create; LSplittedZeile := TStringlist.Create; LLogList.LoadFromFile('c:\yourlog.txt'); for LCount := 0 to LLogList.Count - 1 do begin splitString(LLogList.Strings[LCount], ',', LSplittedZeile); //Jetzt müsste die Zeile gesplittet in "LSplittedZeile" sein - now do something with it end; LSplittedZeile.Free; LLogList.Free; end; |
Re: TStringlist splitten, neues problem
Zitat:
Delphi-Quellcode:
[Edit]@SirThornberry: Stelle deine Funktion doch einmal in die CodeLibrary
detailsl.DelimitedText := '"' + StringReplace(mastersl.Strings[0],';','";"',[rfReplaceAll]);
|
Re: TStringlist splitten, neues problem
@Sharky: Hab da noch ne andere Funktion womit man nur einen bestimmten Index bekommt und nicht die ganze gesplittet wird - allerdings muss die funktion noch bissl auf Geschwindigkeit optimiert werden. Wenn diese Funktion fertig ist stell ich dann beide zamm vielleicht in die Codelib. Und letztendlich gehts doch auch über eine TStringlist und StringReplace...
|
Re: TStringlist splitten, neues problem
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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