Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi probleme mit leerzeichen beim csv einlesen. (https://www.delphipraxis.net/80721-probleme-mit-leerzeichen-beim-csv-einlesen.html)

agm65 14. Nov 2006 11:49


probleme mit leerzeichen beim csv einlesen.
 
hallo leute, habe folgendes problem.
ich benutze um eine csv einzulesen folenden code von mkinzle.

Delphi-Quellcode:
var
   zeilennr: integer;
   DateiName, Zeile: String;
   F: TextFile;

begin

   OpenDialog.Execute;                // Das Ergebnis steht in FileName
//   ShowMessage(OpenDialog1.FileName);
   DateiName := OpenDialog.FileName;  //Der Pfad wird in die Datei gestellt
   txtfilename.Text := DateiName;

   //   ShowMessage(DateiName);
   sl:=TStringList.Create; //Objekt erzeugen
   sl.Delimiter := ';';
   try
      //sl.LoadFromFile(DateiName);      //Datei in Stringliste laden
      AssignFile(F, OpenDialog.FileName);
      Reset(F);
      Readln(F, Zeile); //Erste Zeile laden
      sl.DelimitedText := Zeile; //Zeile der StringListe zuweisen, nun kann man mit der Eigenschaft Count die Anzal der          Spalten auslesen, die Spaltenname sthen dann in der Stringliste

      //sl.Strings[0] enthält Namen erste Spalte usw.

     While not Eof(F) do //Daten laden
      begin
         Readln(F, S);
         Edit1.Text := S;

         sl.DelimitedText := s; // Datenzeile wird in Stringliste geschrieben -< Auslesen wie Kopfspalte

      end;


   finally


      //
      //sl.free; //Objekt wieder freigeben
      edit2.Text := inttostr(sl.count);
end;
die liesst auch wunderbar alles in die stringliste. wenn jetzt aber leerzeichen vorkommen, dann schreibt er pro leerzeichen 1 neue zeile, was kann ich dagegen machen ?

mkinzler 14. Nov 2006 11:58

Re: probleme mit leerzeichen beim csv einlesen.
 
-Die Felder in der CSV Quoten
-Leerzeichen temporär ersetzen.

smudo 14. Nov 2006 12:00

Re: probleme mit leerzeichen beim csv einlesen.
 
Das ist eine ziemlich unangenehme Eigenschaft von DelimitedText. Das läßt sich m.E. nur durch Überschreiben der Methode lösen.

René

agm65 14. Nov 2006 12:04

Re: probleme mit leerzeichen beim csv einlesen.
 
hmm was hättet ihr für einen vorschlag, alle leerzeichen durch zB |$| oder sowas zu ersetzen und später wieder rückgänig zu machen. weil auf die csv dateien habe ich keinen einfluss.

mkinzler 14. Nov 2006 12:19

Re: probleme mit leerzeichen beim csv einlesen.
 
Zitat:

Zitat von agm65
hmm was hättet ihr für einen vorschlag, alle leerzeichen durch zB |$| oder sowas zu ersetzen und später wieder rückgänig zu machen. weil auf die csv dateien habe ich keinen einfluss.

das meinte ich mit Leerzeichen temporär zu ersetzen ;-)

agm65 14. Nov 2006 12:27

Re: probleme mit leerzeichen beim csv einlesen.
 
ach das nervt, jetzt kann ich für jeden string den ich da raus bekomme eine rückaction machen.

agm65 14. Nov 2006 12:35

Re: probleme mit leerzeichen beim csv einlesen.
 
also ich wandel jetzt die leerzeichen in ° um, so:

Delphi-Quellcode:
while Pos(' ', s) > 0 do
s[Pos(' ', s)] := '°';
kann ich jetzt innerhalb der stringliste die einzelnen strings wieder ändern ?

Delphi-Quellcode:
for I := 0 to sl.Count - 1 do
begin
while Pos('°', sl.Strings[i]) > 0 do
sl.Strings[i][Pos('°', sl.Strings[i])] := ' ';
end;

das geht leider nicht ..jemand eine idee ?

mkinzler 14. Nov 2006 12:39

Re: probleme mit leerzeichen beim csv einlesen.
 
Versuchs mal mit StringReplace

agm65 14. Nov 2006 12:40

Re: probleme mit leerzeichen beim csv einlesen.
 
dann für den einzelnden string ? oder für die sl ?

Luckie 14. Nov 2006 12:43

Re: probleme mit leerzeichen beim csv einlesen.
 
Guck dir mal ExplodeExplode in der Code-Lib an.

agm65 14. Nov 2006 12:49

Re: probleme mit leerzeichen beim csv einlesen.
 
ja danke werde ich machen. ich hab das gefühl, dass ich in der stringliste nichts verändern kann. dann muss ich beim übergeben von sl auf meinen string das machen ;(.

agm65 14. Nov 2006 12:53

Re: probleme mit leerzeichen beim csv einlesen.
 
ach perfekt, geht doch !

Delphi-Quellcode:
var
i:integer;
begin
for I := 0 to sl.Count - 1 do
begin
sl.Strings[i] := StringReplace(sl.Strings[i],'°',' ',[rfReplaceAll, rfIgnoreCase]);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 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