AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TXT einlesen und in DB speichern, funzt nicht, weil _ als de
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Christian18 · begonnen am 9. Dez 2004 · letzter Beitrag vom 4. Feb 2011
Antwort Antwort
Seite 1 von 2  1 2      
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

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

  Alt 9. Dez 2004, 15:32
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

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

  Alt 9. Dez 2004, 16:46
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;
Andreas
  Mit Zitat antworten Zitat
DelphiApostel

Registriert seit: 12. Apr 2005
10 Beiträge
 
Delphi 2010 Enterprise
 
#3

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

  Alt 2. Apr 2008, 11:42
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

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

  Alt 2. Apr 2008, 11:51
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
Andreas
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 2. Apr 2008, 11:54
es gibt auch fertige CSV-Kompos, die eine CSV-Datei in eine DataSet kapseln. Z.B. als teil der JVCL.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

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

  Alt 2. Apr 2008, 13:23
Hallo,

ganz einfach:
vor der Zuweisung von DelimetedText noch diese Zeile:
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
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#7

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

  Alt 3. Feb 2011, 17:14
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!?!
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 3. Feb 2011, 17:22
Dreh die Zuweisung mal testweise um:
Delphi-Quellcode:
  fLogLines.Delimiter := '§';
  fLogLines.StrictDelimiter := True;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

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

  Alt 3. Feb 2011, 17:29
Delphi-Quellcode:
  sl.StrictDelimiter:= true;
  sl.Delimiter:='§';
  sl.DelimitedText:=( 'Info: Datei§[17:11:56.498] Berechnung wurde abgeschlossen');
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#10

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

  Alt 4. Feb 2011, 10:44
Irgendwas stimmt hier nicht:
http://postimage.org/image/1olhn7wtg/
Delphi 2010, Update 4 & 5
  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 18:25 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