Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TXT einlesen und in DB speichern, funzt nicht, weil _ als de (https://www.delphipraxis.net/35595-txt-einlesen-und-db-speichern-funzt-nicht-weil-_-als-de.html)

Christian18 9. Dez 2004 14:32


TXT einlesen und in DB speichern, funzt nicht, weil _ als de
 
Hallo,

ich habe ein kleines Problem!

ich lese eine txt ein und will die daten anschließen in eine DB speichern. das funktioniert auch alles so ganz gut.

eine zeile in meiner txt sieht so aus:

1;2;3;Das ist ein Text

hier einmal mein code:

Delphi-Quellcode:
procedure TFMain.Button1Click(Sender: TObject);
  var open1 : TOpenDialog;
      s    : String;
      l    : TStringList;
      f    : TextFile;
begin
  open1:=TOpenDialog.Create(self);

  l:=TStringList.Create();

  // Kapitel einlesen
  if
    open1.Execute
  then
    begin
      AssignFile(f, open1.FileName);
      Reset(f);
      while not Eof(f) do begin
        Readln(f, s);
        l.Delimiter:=';';
        l.DelimitedText:=s;
        TKapitel.Append;
        TKapitelAmtlicherOPS.AsString:=l[0];
        TKapitelKapitelnummer.AsString:=l[1];
        TKapitelKapiteltitel.AsString:=l[2];
        TKapitel.Post;
      end;
      CloseFile(f);
    end;
end;
So und jetzt mein Problem

das leerzeichen, das zwischen den wörtern "das" und "ist", ist erkennt meine Programmroutine als ein Delimiter. wie kann ich das verhintern??? das programm soll einfach nur das ";" als Delimiter erkennen.

PS: Kann mir jemand weiterhelfen???

Mit freundlichen Grüßen

Christian18

shmia 9. Dez 2004 15:46

Re: TXT einlesen und in DB speichern, funzt nicht, weil _ al
 
Mit den CSV Hilfsfunktionen aus der Code-Library ( http://www.delphipraxis.net/internal...ct.php?t=29791 ) sollte das kein Problem sein.

Du solltest dich übrigens nicht darauf verlassen, dass immer 3 Felder vorhanden sind,
deshalb:
Delphi-Quellcode:
      Reset(f);
      while not Eof(f) do begin
        Readln(f, s);
     l.Clear;
     ParseCSVLine(s, l, ';', '"');

      while l.count < 3 do l.Add('???');  // auf 3 Felder auffüllen

        TKapitel.Append;
        TKapitelAmtlicherOPS.AsString:=l[0];
        TKapitelKapitelnummer.AsString:=l[1];
        TKapitelKapiteltitel.AsString:=l[2];
        TKapitel.Post;
      end;

DelphiApostel 2. Apr 2008 10:42

Re: TXT einlesen und in DB speichern, funzt nicht, weil _ al
 
Hallo,

ich würde einfach die folgende Funktion benutzen:

Delphi-Quellcode:
//...
 l.Delimiter:=';';
 l.DelimitedText:='"'+StringReplace(s,';','";"',[rfReplaceAll])+'"';
//...
Für StringReplace muss noch die Unit SysUtils eingebunden werden ;)

MfG
Delphi Apostel

shmia 2. Apr 2008 10:51

Re: TXT einlesen und in DB speichern, funzt nicht, weil _ al
 
Zitat:

Zitat von DelphiApostel
ich würde einfach die folgende Funktion benutzen:

Delphi-Quellcode:
//...
 l.Delimiter:=';';
 l.DelimitedText:='"'+StringReplace(s,';','";"',[rfReplaceAll])+'"';
//...
Für StringReplace muss noch die Unit SysUtils eingebunden werden ;)

Für einfache CSV Dateien könnte das funktionieren, es versagt aber dann, wenn Anführungszeichen und Strichpunkte in den Nutzdaten verwendet werden.
Beispiel mit 3 Datenfeldern:
Code:
12500;"Düse - Pumpe Vorrichtung; Status 9;""obsolete"";""Auslaufmodel"""; 01.11.1987
Das 2. Feld enthält den Klartext:
Code:
Düse - Pumpe Vorrichtung; Status 9;"obsolete";"Auslaufmodel"
Und obwohl Anführungszeichen und Strichpunkte enthalten sind, ist es nur ein Feld.
Also immer schön aufpassen mit CSV-Dateien ;-)

mkinzler 2. Apr 2008 10:54

Re: TXT einlesen und in DB speichern, funzt nicht, weil _ al
 
es gibt auch fertige CSV-Kompos, die eine CSV-Datei in eine DataSet kapseln. Z.B. als teil der JVCL.

ChrisE 2. Apr 2008 12:23

Re: TXT einlesen und in DB speichern, funzt nicht, weil _ al
 
Hallo,

ganz einfach:
vor der Zuweisung von DelimetedText noch diese Zeile:
Delphi-Quellcode:
l.StrictDelimiter := TRUE;
Noch kurz der Hilfetext dazu:
Mit dieser Eigenschaft legen Sie fest, ob Delimiter der einzige in der Eigenschaft DelimitedText verwendete Wert ist. Bei True werden die einzelnen Strings in DelimitedText nur durch das in Delimiter angegebene Zeichen getrennt. Bei False können die einzelnen Strings in DelimitedText durch ein Leerzeichen, ein nicht druckbares Zeichen oder dem in Delimiter angegebenen Zeichen getrennt werden.

Gruß, Chris

schwa226 3. Feb 2011 16:14

AW: TXT einlesen und in DB speichern, funzt nicht, weil _ als de
 
Jetzt habe ich eine Frage zu Delphi 2010:

Ich habe diesen Text:
'Info: Datei§[17:11:56.498] Berechnung wurde abgeschlossen'

Delphi-Quellcode:
  fLogLines := TStringList.Create;
  fLogLines.StrictDelimiter := True;
  fLogLines.Delimiter := '§';
Nun wird der Text aber trotzdem bei jedem Leerzeichen getrennt und es entstehen 6 Strings!?!

mkinzler 3. Feb 2011 16:22

AW: TXT einlesen und in DB speichern, funzt nicht, weil _ als de
 
Dreh die Zuweisung mal testweise um:
Delphi-Quellcode:
  fLogLines.Delimiter := '§';
  fLogLines.StrictDelimiter := True;

Bummi 3. Feb 2011 16:29

AW: TXT einlesen und in DB speichern, funzt nicht, weil _ als de
 
Delphi-Quellcode:
  sl.StrictDelimiter:= true;
  sl.Delimiter:='§';
  sl.DelimitedText:=( 'Info: Datei§[17:11:56.498] Berechnung wurde abgeschlossen');

schwa226 4. Feb 2011 09:44

AW: TXT einlesen und in DB speichern, funzt nicht, weil _ als de
 
Irgendwas stimmt hier nicht:
http://postimage.org/image/1olhn7wtg/


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 Uhr.
Seite 1 von 2  1 2      

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