Delphi-PRAXiS :: Das Forum für Fragen zu Delphi
Das Experten Forum für Delphi Programmierer
Hilfe für CodeGear Delphi gibts es hier im Forum
Delphi Quelltexte und Source Codes
 
Delphi-PRAXiS :: Foren-ÜbersichtForen-Übersicht Delphi-PRAXiS Modul-ÜbersichtSite-Map Delphi-PRAXiS durchsuchenSuchen Delphi-PRAXiS Code-LibraryCode-Library Jetzt registrieren!Registrieren Login  
   
 
0
 
Delphi für Win32
CSV einlesen und in Stringlist speichern
Ein Delphi (Win32)-Thema von merlin2539.

Vorheriges Thema anzeigen  |  Nächstes Thema anzeigen
Neuen Beitrag schreiben Auf Beitrag antworten
als PDF-Datei herunterladenThema ausdrucken
 
Delphi-PRAXiS Forum - Übersicht -> Object-Pascal / Delphi-Language
Seite 1 von 1   [ 7 Beiträge ]  
 
 Autor 
 Nachricht 
 
merlin2539 #1|Beitrag #773385Verfasst am: 06.09.2007, 15:28      Titel: CSV einlesen und in Stringlist speichern Antworten mit Zitat
Mitglied
Status: offline
Beiträge: 13
angemeldet: 02.11.2005


Sprache: Delphi (Win32)

Hallo zusammen
habe ein kleines Problem, habe auch schon hier im forum gesucht aber noch nicht das richtige gefunden bzw. umwurstelbares.

Möchte nur eine csv datei in eine stringlist einlesen

Eingabe
dasf sadf;asdf asdf;asdf asdf; fdf fff;"asdfasdf;asdf"

^ ^ ^ ^ ^ ^

je der ^ eine Variable, aber mein PRG macht nach jedem Blank auch eine Variable

Delphi-Quellcode: zusammenfalten | markieren
s := TStringList.Create;
  t := TStringlist.Create;
    Try
    s.LoadFromFile('datei.csv');
   s.Delimiter := ';';

    s.DelimitedText := s.Strings[0];


      label1.Caption:= s.Strings[0];
    label2.Caption:= s.Strings[1];
    label3.Caption:= s.Strings[2];
    s.delete(0);
    //s.SaveTofile('datei1.csv');
  Finally


kann mir jemand helfen? Benutze delphi 6

kann das sein das der befehl hier nicht geht? ( s.StrictDelimiter := true;)

[edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit]

 Zuletzt bearbeitet von SirThornberry am 07.09.2007, 09:08, insgesamt 1-mal bearbeitet.
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
mkinzler #2|Beitrag #773429Verfasst am: 06.09.2007, 16:30      Titel: Re: CSV einlesen und in Strinlist speichern Antworten mit Zitat
Moderator
Status: offline
Beiträge: 24.962
angemeldet: 09.12.2005
Wohnort: Heilbronn
RAD-Studio 2009 Pro

Leerzeichen werden immer als Trenner erkannt (Bug in Delphi)
Trenne besser mit Pos/PosEx oder verwende ein CSV-DataSet.
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
merlin2539 #3|Beitrag #773526Verfasst am: 06.09.2007, 19:06      Titel: Re: CSV einlesen und in Strinlist speichern Antworten mit Zitat
Mitglied
Status: offline
Beiträge: 13
angemeldet: 02.11.2005


das problem ist folgendes, das ich die datei aus excel exportiere und dieser se manchmal mit ohne " ausgibt. weist du eine andere möglichkeit dies zu nutzen? gibt es ein möglichkeit leicht auf office zuzugreifen?
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
mkinzler #4|Beitrag #773533Verfasst am: 06.09.2007, 19:16      Titel: Re: CSV einlesen und in Strinlist speichern Antworten mit Zitat
Moderator
Status: offline
Beiträge: 24.962
angemeldet: 09.12.2005
Wohnort: Heilbronn
RAD-Studio 2009 Pro

Zitat:
gibt es ein möglichkeit leicht auf office zuzugreifen?
Ja OLE/COM
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
grenzgaenger #5|Beitrag #773623Verfasst am: 06.09.2007, 23:05      Titel: Re: CSV einlesen und in Strinlist speichern Antworten mit Zitat
ehem. Benutzer


guckste hier: Titel: Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
mkinzler #6|Beitrag #773690Verfasst am: 07.09.2007, 07:31      Titel: Re: CSV einlesen und in Strinlist speichern Antworten mit Zitat
Moderator
Status: offline
Beiträge: 24.962
angemeldet: 09.12.2005
Wohnort: Heilbronn
RAD-Studio 2009 Pro

Bzw. der Artikel von Lemmy über die Automatisierung von Office
http://www.dsdt.info/tutorials/automation/
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
DGL-luke #7|Beitrag #773832Verfasst am: 07.09.2007, 12:44      Titel: Re: CSV einlesen und in Stringlist speichern Antworten mit Zitat
"Rüsselmops" ;-)
Alter: 21
Status: offline
Beiträge: 4.030
angemeldet: 01.04.2005
Wohnort: Bad Tölz
Delphi 2006 Professional

Hallo,

habe hier mal ein schnell hingehacktes CSV-To-Stringlist geschrieben. Funktioniert allerdings noch nicht hundertprozentig!

Werde das noch korrigieren, bzw. komplett umschreiben. Hier als komplette Unit:

Delphi-Quellcode: zusammenfalten | markieren
unit UCSV;

interface

uses Classes;

function CSVToStringList(Text: string; Separator, Escaper, Grouper: Char; UseEscaper, UseGrouper, ResolveEscapings, ResolveGroupings: Boolean): TStrings;

implementation

function GetNextCharPos(Text: string; C: Char; StartPos: Integer): Integer;
var
  i: Integer;
begin
  for i := StartPos to Length(Text) do
    if Text[i] = C then
    begin
      Result := i;
      Break;
    end;
   
end;

function CSVToStringList(Text: string; Separator, Escaper, Grouper: Char; UseEscaper, UseGrouper, ResolveEscapings, ResolveGroupings: Boolean): TStrings;
var
  i: Integer;
  Buffer: string;
  ClosingGrouperPos: Integer;
begin
  Result := TStringList.Create;

  i := 1;
  while i <= Length(Text) do
  begin
    if (Text[i] = Separator) or ((i = Length(Text)) and (Buffer <> '')) then
    begin
      Result.Add(Buffer);
      Buffer := '';
      Inc(i)
    end
    else if (Text[i] = Escaper) and (UseEscaper) then
      if ResolveEscapings then
      begin
        Buffer := Buffer + Text[i+1];
        Inc(i,2);
      end
      else
      begin
        Buffer := Buffer + Text[i+1] + Text[i+2];
        Inc(i,2);
      end
    else if (Text[i] = Grouper) and (UseGrouper) then
    begin
      repeat
        ClosingGrouperPos := GetNextCharPos(Text,Grouper,i+1);
      until (Text[ClosingGrouperPos-1] <> Escaper) or (not UseEscaper);

      if ResolveGroupings then     
        Buffer := Copy(Text,i+1,ClosingGrouperPos-1)
      else
        Buffer := Copy(Text,i,ClosingGrouperPos);
      i := ClosingGrouperPos + 1; //we will hit the separator in next iteration and flush the buffer.
    end
    else
    begin
      Buffer := Buffer + Text[i];
      Inc(i);
    end;
  end;
end;

end.


Benutzung:

In Text muss der komplette CSV-String übergeben werden.
In Separator der Char, der die einzelnen Datensätze trennt, also typischerweise ';'.
In Escaper ein Escapechar, der dafür sorgt, dass der ihm folgende Char keinesfalls als Steuerzeichen erkannt wird, also z.B. '\'.
Beispiel:
Code: markieren
*;abc\;def\\;*

Wird als folgender Datensatz erkannt:
Code: markieren
abc;def\

(Doppelte Angabe des Escapechars führt zur Erkennung eines einfachen Vorkommens des Escapechars als Literal!)
In Grouper ein Char, der einen Datensatz begrenzt, damit z.B. der Separator darin vorkommen kann:
Code: markieren
*;"abc;def";*

wird zu
Code: markieren
abc;def


UseEscaper und UseGrouper werden benutzt, um festzulegen, ob der übergebene Escaper/Grouper interpretiert werden.
Wenn z.B. Escaper='\', aber UserEscaper auf false steht, wird folgendes:
Code: markieren
*;abc\def;'*

zu
Code: markieren
abc\def


Auch der Grouper wird dann als ganz normales Literal in den erkannten Datensatz übernommen.

Wenn ResolveEscapings bzw. ResolveGroupings auf true ist, werden Escaper und Grouper aus dem erkannten Datensatz entfernt.
Das obige Beispiel für Escaper nimmt an, dass ResolveEscapings auf true steht; ansonsten würde das Ergebnis so aussehen:
Code: markieren
abc\;def\\

Das escapete Semikolon wird also erkannt und nicht als Separator behandelt, der Escaper davor wird aber stehengelassen.

Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1

 Zuletzt bearbeitet von DGL-luke am 07.09.2007, 12:54, insgesamt 1-mal bearbeitet.
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
Anzeige-Optionen:    
 
Delphi-PRAXiS Forum - Übersicht -> Object-Pascal / Delphi-Language Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1   [ 7 Beiträge ]  
 
  Neuen Beitrag schreiben Auf Beitrag antworten
als PDF-Datei herunterladenThema ausdrucken
 
   
Gehe zu:  
Du darfst keine Beiträge in dieses Forum schreiben.
Du darfst auf Beiträge in diesem Forum nicht antworten.
Du darfst Deine Beiträge in diesem Forum nicht bearbeiten.
Du darfst Deine Beiträge in diesem Forum nicht löschen.
Du darfst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten.
Du kannst Dateien in diesem Forum nicht herunterladen.


Impressum / Kontakt
Allgemeine Geschäftsbedingungen
Verhaltenskodex & FAQ

Delphi-PRAXiS :: Das Forum für Delphi-Programmierer
Das Experten Forum für Delphi ProgrammiererHilfe für Borland Delphi gibts es hier im ForumDelphi Quelltexte und Source CodesDelphi-PRAXiS :: Das Forum für DelphiWindows APIInternet und NetzwerkeVCL und Datenbanken
 

Delphi-PRAXiS V.2005 III
© 2002-2009 by Daniel R. Wolf
powered by phpBB © phpBB Group

Impressum / Kontakt Allgemeine Geschäftsbedingungen