AGB  ·  Datenschutz  ·  Impressum  







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

eBay Turbolister CSV einlesen

Ein Thema von bennle · begonnen am 25. Feb 2007 · letzter Beitrag vom 27. Feb 2007
Antwort Antwort
Seite 3 von 3     123   
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#21

Re: eBay Turbolister CSV einlesen

  Alt 26. Feb 2007, 19:47
Zitat von bennle:
Im Grunde mach ich das schon so, nur ich schreibe die Datei in ein Memo und lese dann die Zeilen aus. Aber nach eine gewissen Anzahl von Zeichen macht er trotzdem ein Zeilenumbruch
Bei 1024, nehme ich an. Das macht der Editor (Notepad) auch. Lese die Datei mal damit ein, da passiert dasselbe.
Was man dagegen unternehmen kann, weiß ich im Moment nicht. Habe die Geschichte hier jetzt nur überflogen.

Zitat von bennle:
Zudem habe ich noch das Problem mit dem HTML Code!!! Denn dieser Beinhaltet manchmal das Trennzeichen!
Naja, dazu muss man halt wissen, wie eine CSV-Datei aufgebaut ist. Wenn das ; (das Trennzeichen in deiner csv-Datei) im Feld mit vorkommt, so ist das Feld in " eingeschlossen. Ist ein Feld in " eingeschlossen und es kommt ein " im Feld vor, so wird dieses gedoppelt.

Code:
Bsp ==> Zelle: "Ja"-Sager --> Zelle in Datei: """Ja""-Sager"
          Zelle: Auto;Bus   --> Zelle in Datei: "Auto;Bus"
          Zelle: ach;"nee"  --> Zelle in Datei: "ach;""nee"""
Ich habe Einleseroutinen in Klassen integriert, die das beherrschen. Aber auf die Schnelle einlesen können habe ich deine Datei auch nicht.
  Mit Zitat antworten Zitat
bennle

Registriert seit: 22. Jul 2005
Ort: Kehl
139 Beiträge
 
Delphi 2007 Professional
 
#22

Re: eBay Turbolister CSV einlesen

  Alt 26. Feb 2007, 20:15
Zitat von IngoD7:
Zitat von bennle:
Im Grunde mach ich das schon so, nur ich schreibe die Datei in ein Memo und lese dann die Zeilen aus. Aber nach eine gewissen Anzahl von Zeichen macht er trotzdem ein Zeilenumbruch
Bei 1024, nehme ich an. Das macht der Editor (Notepad) auch. Lese die Datei mal damit ein, da passiert dasselbe.
Was man dagegen unternehmen kann, weiß ich im Moment nicht. Habe die Geschichte hier jetzt nur überflogen.

Zitat von bennle:
Zudem habe ich noch das Problem mit dem HTML Code!!! Denn dieser Beinhaltet manchmal das Trennzeichen!
Naja, dazu muss man halt wissen, wie eine CSV-Datei aufgebaut ist. Wenn das ; (das Trennzeichen in deiner csv-Datei) im Feld mit vorkommt, so ist das Feld in " eingeschlossen. Ist ein Feld in " eingeschlossen und es kommt ein " im Feld vor, so wird dieses gedoppelt.

Code:
Bsp ==> Zelle: "Ja"-Sager --> Zelle in Datei: """Ja""-Sager"
          Zelle: Auto;Bus   --> Zelle in Datei: "Auto;Bus"
          Zelle: ach;"nee"  --> Zelle in Datei: "ach;""nee"""
Ich habe Einleseroutinen in Klassen integriert, die das beherrschen. Aber auf die Schnelle einlesen können habe ich deine Datei auch nicht.
Danke für die Aufklärung! Ich dachte mir schon das es mit dem Memo nur 1024 möglich ist. Mit RichEdit vorraussichtlich 2048.
Das mit dem HTML Code ist mir wirklich vorher nicht aufgefallen. Aber danke für die Aufklärung! Ich sehe natürlich trotzdem noch ein Problem beim Einlesen.
Muss ich denn die Datei in ein Memo schreiben? Oder gibt es eine Möglichkeit die Datei Zeile für Zeile auszulesen?

Es wundert mich wirklich, dass sich noch keiner damit befasst hat
Naja scheint man nicht oft zu brauchen.

MfG
Benny
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.756 Beiträge
 
Delphi 10.4 Sydney
 
#23

Re: eBay Turbolister CSV einlesen

  Alt 26. Feb 2007, 20:24
Die Datei mußt Du nicht in ein Memo schreiben.

Zeileweises einlesen geht z.b. so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 EbayFile: TextFile;
 data:String;
 dataItems: TStringdynarray;
 i:Byte;
 r:Integer;

begin
 AssignFile(EbayFile,ExtractFilePath(ParamStr(0))+'./turbolister.csv');
 Reset(EbayFile);
 r:=0;
 While not eof(EbayFile) do
   begin
     ReadLn(EbayFile,data);
     dataItems:=explode(';',data);
     if r > StringGrid1.RowCount -1 then
       StringGrid1.RowCount:=r;
     for i:=1 to length(dataItems) -1 do
       begin
         if StringGrid1.ColCount < i then
           StringGrid1.ColCount:=i;
         StringGrid1.Cells[i,r]:=dataItems[i];
       end;
     Memo1.Lines.Add(data);
     inc(r);
   end;
 CloseFile(EbayFile);
end;
Der Code hat aber auch das Problem mit dem ; im HTML Code.

Mit Streams sollte das auch gehen, damit habe ich aber keine Erfahrungen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
bennle

Registriert seit: 22. Jul 2005
Ort: Kehl
139 Beiträge
 
Delphi 2007 Professional
 
#24

Re: eBay Turbolister CSV einlesen

  Alt 26. Feb 2007, 20:45
Hmm,
mein Compiler kennt TStringdynarray nicht! Muss ich etwas einbinden?

ERLEDIGT!! Unit Types musste eingebunden werden
Danke


Gruß
Benny
  Mit Zitat antworten Zitat
bennle

Registriert seit: 22. Jul 2005
Ort: Kehl
139 Beiträge
 
Delphi 2007 Professional
 
#25

Re: eBay Turbolister CSV einlesen

  Alt 26. Feb 2007, 21:44
Hi,
Also danke, ich denke mir reicht das nun für's erste!!
Hab zwar hier und da noch ein paar Probleme, aber ich denke die werde ich Meistern.
Wenn nicht, dann werde ich mich hier wieder im Board melden! Denn hier bekommt man einfach einen super Support.

Hier meine Lösung für den HTML CODE im CSV
Delphi-Quellcode:
function CSVExplode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
var
  SepLen: Integer;
  F, P: PChar;
  ALen, Index: Integer;
begin
  SetLength(Result, 0);
  if (S = '') or (Limit < 0) then Exit;
  if Separator = 'then
  begin
    SetLength(Result, 1);
    Result[0] := S;
    Exit;
  end;
  SepLen := Length(Separator);
  ALen := Limit;
  SetLength(Result, ALen);

  Index := 0;
  P := PChar(S);
  while P^ <> #0 do
  begin
    F := P;
//Position des HTML Codes herausfinden!
    if pos('"',P) = 1 then
    begin
      P := AnsiStrPos(P, PChar('";'));
    end
    else
      P := AnsiStrPos(P, PChar(Separator));
//ENDE Position des HTML Codes herausfinden!

    if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F);
    if Index >= ALen then
    begin
      Inc(ALen, 5);
      SetLength(Result, ALen);
    end;
    SetString(Result[Index], F, P - F);
    Inc(Index);
    if P^ <> #0 then Inc(P, SepLen);
  end;
  if Index < ALen then SetLength(Result, Index);
end;
Evtl sollte man noch die Anführungszeichen bei der HTML Zelle entfernen, allerdings weis ich den Befehl momentan nicht
Ist wohl schon zu spät.
Ebenfalls gibt es ein Problem, sobald ein Zeilenumbruch im HTML Text zu sein scheint!
Wenn jemand weiß, wie ich das regeln kann, dann bitte ich um Hilfe! Denn es kommt eine Zugriffsverletzung
Also Danke nochmal


Gruß
Benny
  Mit Zitat antworten Zitat
Benutzerbild von agm65
agm65

Registriert seit: 21. Okt 2003
1.194 Beiträge
 
Delphi 2006 Professional
 
#26

Re: eBay Turbolister CSV einlesen

  Alt 27. Feb 2007, 11:08
dafür habe ich mir auch was einfallen lassen, ich hatte genu das problem ...einfach einen stringreplace drüberlaufen lassen (also beim einlesen der einzelnen zeilen) die leerzeichen mit zb $%& füllen und später einfach umgekehrt ! das geht 100%
euer Peter Porka
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 15:45 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