AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringlist splitten, neues problem

Ein Thema von Michael80 · begonnen am 17. Jun 2004 · letzter Beitrag vom 18. Jun 2004
Antwort Antwort
Seite 1 von 2  1 2      
Michael80

Registriert seit: 20. Nov 2003
Ort: Treuchtlingen
72 Beiträge
 
Delphi 10.3 Rio
 
#1

TStringlist splitten, neues problem

  Alt 17. Jun 2004, 08:04
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:
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.
mir fehlt jetz irgendwie ein ansatz wie ich die einzelnen Zeilen durchlaufe und nach dem ;
aufteile die ergebnisse werden dann mit

insert into TABLE(FELD1, FELD2) VALUES ('wert1','wert2') hoffentlich in die datenbank gespeichert.


Ich hoff ihr verzeiht mir, aber ich bin neu in Delphi und grad am lernen.


Gruß

Michael
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: TStringlist nach ; splitten und in Interbase Speichern

  Alt 17. Jun 2004, 08:37
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Michael80

Registriert seit: 20. Nov 2003
Ort: Treuchtlingen
72 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: TStringlist nach ; splitten und in Interbase Speichern

  Alt 17. Jun 2004, 08:40
danke, werd ich sofort probieren!

---------------------------------------------------------------------

wunderbar, funktioniert einwandfrei

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;
  Mit Zitat antworten Zitat
Michael80

Registriert seit: 20. Nov 2003
Ort: Treuchtlingen
72 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: TStringlist splitten, neues problem

  Alt 17. Jun 2004, 15:25
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?
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: TStringlist splitten, neues problem

  Alt 18. Jun 2004, 07:28
Zitat von Michael80:
...sprich er macht aus
meine strasse 1...
Hai Michael80,

in diesem Fall müssen die "Einträge" in der Datei in " eingeschlossen sein (oder ein beliebiges anderes Zeichen).

Zitat:
"dies","ist","ein test","mit","einem blank im text"
Deiner StringListe sagst Du in der Eigenschaft .QuoteChar welches das Zeichen ist. In unserem Beispiel oben also:

Delphi-Quellcode:
  detailsl.Delimiter := ','; // Trennzeichen der Einträge pro Zeile
  detailsl.QuoteChar := '"'; // Quoting Zeichen.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Michael80

Registriert seit: 20. Nov 2003
Ort: Treuchtlingen
72 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: TStringlist splitten, neues problem

  Alt 18. Jun 2004, 07:51
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 nu bin ich aber genausoweit wie vorher ...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: TStringlist splitten, neues problem

  Alt 18. Jun 2004, 07:53
Oder du versuchst es mal hiermit: http://www.delphipraxis.net/internal...=170554#170554
Aufruf:
splitString(ZuZerlegendeZeile, ',', TDestStringlist); Beispiel
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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#8

Re: TStringlist splitten, neues problem

  Alt 18. Jun 2004, 08:00
Zitat von Michael80:
.... funktion schreiben die immer vor und nach dem ; ein " einfügt, ...
Wenn sichergestellt ist das in der Zeile das ; nur als Trennzeichen vorkommt geht es ja ganz einfach:

  detailsl.DelimitedText := '"' + StringReplace(mastersl.Strings[0],';','";"',[rfReplaceAll]); [Edit]@SirThornberry: Stelle deine Funktion doch einmal in die CodeLibrary
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: TStringlist splitten, neues problem

  Alt 18. Jun 2004, 08:09
@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...
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#10

Re: TStringlist splitten, neues problem

  Alt 18. Jun 2004, 08:14
Zitat von SirThornberry:
... Und letztendlich gehts doch auch über eine TStringlist und StringReplace...
Jup! Aber das geht erst seit Delphi 7 (oder schon bei D6?). Deine Funktion ist halt für alle Versionenn möglich
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 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