![]() |
eBay Turbolister CSV einlesen
Hallo,
Ich möchte eine CSV Datei in mein Programm laden. Vorher habe ich die Datei in ein Memo geladen, jedoch festgestellt dass er ohne Erlaubnis des Zeilenumbruchs trotzdem alles auf 3 Zeilen aufteilt. Ich hab dann etwas im Forum gesucht und bin auf JvCSVData gestoßen. Dies scheint auch wirklich komfortabler zu sein und eine echt klasse Erweiterung. Jedoch stelle ich nun fest, dass dieses CSVData nur 120 Zellen unterstützt. :evil: Hat jemand eine Idee wie ich diese Datei dennoch verarbeiten kann? Ich muss diese Datei unbedingt einlesen. Es wäre auch ok, wenn er mir den Rest nicht ausliest, dafür aber die 120 Zellen! Für eine Lösung wäre ich dankbar. Gruß Benny PS: Ich verwende derzeit Delphi7 |
Re: eBay Turbolister CSV einlesen
Schau dir mal
![]() |
Re: eBay Turbolister CSV einlesen
Zitat:
Gruß Benny PS: Gibts auch etwas als OpenSource? |
Re: eBay Turbolister CSV einlesen
|
Re: eBay Turbolister CSV einlesen
Es gab mal ne freie Version, die gibt es wohl nicht mehr :(
Aber $15 geht ja. Sonst könntes du dir mal die Sourcen von JcCSVDataSet anshauen, warum er nur 120 Zellen schafft. |
Re: eBay Turbolister CSV einlesen
Wie verwende ich denn den
CSV Parser v.1.0.1.2 ??? @mkinzer Leider habe ich nicht genügend Erfahrung im Programmieren, dass ich herausfinden könnte, warum nur 120 Zeilen unterstützt werden. Gruß Benny |
Re: eBay Turbolister CSV einlesen
Hallo Benny,
du möchtest eine CSV-Datei zur Betrachtung in dein Programm laden? Du kannst das mit einer ListView und StringGrids machen, falls du den CSVDataSet aus irgendwelchen Gründen nicht einsetzen kannst. Ein Beispiel findest du hier: ![]() Die TurboLister Austauschdateien haben laut eBay 102 Spalten - nicht 120. Freundliche Grüße |
Re: eBay Turbolister CSV einlesen
Zitat:
Hmm leider stimmt der Seperator nicht! Weiß nicht wie ich das verwenden soll. Aber die Austauschddatei die mir vorliegt hat 145 Zeillen (Excel FO) Gruß Benny |
Re: eBay Turbolister CSV einlesen
CSV ist ja nicht gleich CSV.
Welches Trennzeichen verwendest du denn in deiner CSV-Datei? |
Re: eBay Turbolister CSV einlesen
Zitat:
Gruß Benny PS: Aber wie stelle ich es ein? |
Re: eBay Turbolister CSV einlesen
In der Demo kannst du im Ereignis OnCreate() der Form zwei zusätzliche Zeilen eintragen:
Delphi-Quellcode:
Danach solltest du die Datei problemlos öffnen können. Allerdings soll dir die Demo nur den Umgang mit einer virtuellen ListView nahe bringen.
procedure TMainForm.FormCreate(Sender: TObject);
begin Application.Title := Caption; FFileName := ''; FNames := TStringList.Create; Values := TStringList.Create; FFields := TStringList.Create; // Trenner umstellen FFields.Delimiter := ';'; FNames.Delimiter := ';'; end; Bei ![]() Zitat:
Freundliche Grüße |
DP-Maintenance
Dieses Thema wurde von "alcaeus" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Passt besser hierher. |
Re: eBay Turbolister CSV einlesen
am besten du nimmst den code von mr kinzler, den hab ich auch genommen, damit gehts 1a !
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; |
Re: eBay Turbolister CSV einlesen
Es dürfen dann halt ekien Lerrzeichen in den Feldern vorkommen, dsa diese dann als Spaltentrenner erkannt werden.
|
Re: eBay Turbolister CSV einlesen
Zitat:
Wie kann ich abhilfe schaffen? Ich werde mir jetzt mal noch den Code genauer anschauen. Vielen Dank. MfG Benny |
Re: eBay Turbolister CSV einlesen
Hallo,
So nun also ich bin echt am verzweifeln. Das was auf der Ebayseite steht stimmt leider nicht! Denn Sie hat mehr als 102 Zellen und verwendet (;) Semikolon als Trennzeichen. Vielleicht stammen die Daten aus der Zeit von Turbolister No. 1 Ok ich habe jetzt mal eine Datei im Anhang! Ich denke ich gehe da schritt für Schritt ran! Komischerweise kann Excel sie richtig öffen! Es stört nicht mal das obwohl es ein Trennzeichen wäre! Wie macht man das??? Wäre super wenn wir das hinkriegen würden. Gruß Benny [edit=MrSpock]Attachment auf Wunsch des Erstellers gelöscht. Mfg, MrSpock[/edit] |
Re: eBay Turbolister CSV einlesen
Warum zerlegst Du nicht die Zeilen mit
![]() und schreinst dann das StringArray in ein TStringGrid oder TMemo. Grüße Klaus |
Re: eBay Turbolister CSV einlesen
Hi Klaus,
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 und dann gibt es schon Fehler! Zudem habe ich noch das Problem mit dem HTML Code!!! Denn dieser Beinhaltet manchmal das Trennzeichen! MfG Benny |
Re: eBay Turbolister CSV einlesen
Du hast aber auch WordWrap des Memo auf false stehen oder?
Grüße Klaus |
Re: eBay Turbolister CSV einlesen
Mir fällt gerade etwas ein.
Ist es möglich die CSV Datei als Excel-Datei zu öffen (also mit Excel API) und dann die Zellen auszulesen? Wäre um einiges einfacher! Gruß Benny |
Re: eBay Turbolister CSV einlesen
Zitat:
Was man dagegen unternehmen kann, weiß ich im Moment nicht. Habe die Geschichte hier jetzt nur überflogen. Zitat:
Code:
Ich habe Einleseroutinen in Klassen integriert, die das beherrschen. Aber auf die Schnelle einlesen können habe ich deine Datei auch nicht. :?
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""" |
Re: eBay Turbolister CSV einlesen
Zitat:
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 :wink: Naja scheint man nicht oft zu brauchen. MfG Benny |
Re: eBay Turbolister CSV einlesen
Die Datei mußt Du nicht in ein Memo schreiben.
Zeileweises einlesen geht z.b. so:
Delphi-Quellcode:
Der Code hat aber auch das Problem mit dem ; im HTML Code.
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; Mit Streams sollte das auch gehen, damit habe ich aber keine Erfahrungen. Grüße Klaus |
Re: eBay Turbolister CSV einlesen
Hmm,
mein Compiler kennt TStringdynarray nicht! Muss ich etwas einbinden? ERLEDIGT!! Unit Types musste eingebunden werden :D Danke Gruß Benny |
Re: eBay Turbolister CSV einlesen
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. :thumb: Hier meine Lösung für den HTML CODE im CSV
Delphi-Quellcode:
Evtl sollte man noch die Anführungszeichen bei der HTML Zelle entfernen, allerdings weis ich den Befehl momentan nicht :P
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; 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 |
Re: eBay Turbolister CSV einlesen
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%
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 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