![]() |
AW: Problem mit dem Import aus einer csv-Datei in eine StringList
Also meine importierte Datei ist eine .csv-Datei und keine direkte Textdatei.
Wenn ich diese im Notepad öffne erhalte ich die Zeichen, welche ich mir eben ausgeben lassen habe. Und nein ich finde hier im String kein Semikolon. |
AW: Problem mit dem Import aus einer csv-Datei in eine StringList
Zitat:
Und ohne Semikolon kann Deine Stringliste dann auch nicht "delimiten"... |
AW: Problem mit dem Import aus einer csv-Datei in eine StringList
Also liegt das Problem nicht an meinem Code, sondern an der Datei, welche ich importieren möchte ?
|
AW: Problem mit dem Import aus einer csv-Datei in eine StringList
Sehr wahrscheinlich
|
AW: Problem mit dem Import aus einer csv-Datei in eine StringList
Okay, danke schonmal für die Info.
Allerdings weiß ich nicht wie ich die Datei dann entsprechend anpasse, dass ich Sie delimiten kann... |
AW: Problem mit dem Import aus einer csv-Datei in eine StringList
Wie schon gesagt ist CSV eine Textdatei, die kannst Du selbst mit einem Texteditor Deiner Wahr erstellen.
Du kannst natürlich auch eine Exceldatei als CSV exportieren, das ist dann bequemer. In der CSV-Date stehen dann Deine Werte, die Du einlesen möchtest mit einem Trennzeichen, in Deinem Fall das Semikolon, getrennt voneinander Als Beispiel: wert1;name1;geburt1; Diese eine Zeile wird dann per Delimiter über DelimitedText in die Strings Deiner Stringlist umgewandelt: Liste[0] = wert1 liste[1] = name1 liste[2] = geburt1 Wie Du siehst ist das ganz simpel. |
AW: Problem mit dem Import aus einer csv-Datei in eine StringList
Okay dann bedanke ich mich nochmal bei allen die mir hierbei weitergeholfen haben und dann versuche ich mal eine neue Datei zu erstellen, welche ich dann auch richtig einlesen kann.
|
AW: Problem mit dem Import aus einer csv-Datei in eine StringList
Für viele Menschen gilt die Formel csv = Excel. Vielleicht hat jemand ein Worksheet (*.xls bzw. *.xlsx) einfach in *.csv umbenannt. Dann kann das auch nicht funktionieren.
|
AW: Problem mit dem Import aus einer csv-Datei in eine StringList
Zitat:
Die erste Frage, die zu beantworten wäre ist: Um was für eine Datei handelt es sich? Zweite Frage: Was für einen Zeichensatz enthält sie. Dritte Frage: Enthält sie den windowstypischen Zeilenumbruch von #13#10? Achso: csv heißt Comma-separated values Ein Semikolon ist kein Komma. Also zuerst mal prüfen, welches Zeichen denn zur Trennung der einzelnen Werte genutzt wird und dieses Zeichen dann als Delimiter nutzen. Probier' es mal nicht mit AssignFile ... sondern mit zwei Stringlisten:
Delphi-Quellcode:
(Nur hingedaddelt und nicht getestet.)
var
sZInhalt: string; Datei: TStringList; liste: TStringList; i: Integer; tempRecord: dataRecord; begin if ((OpenDialog1.Execute()) and (OpenDialog1.Filename <> '')) then begin GanttChart1.BeginUpdate(); // Änderungen an der Oberfläche werden gemacht try Datei := TStringList.Create(); liste := TStringList.Create(); try Datei.LoadFromFile(OpenDialog1.Filename); // 0. Zeile ist die Kopfzeile, die wir nicht benötigen. for i := 1 to Datei.Count - 1 do begin // Hier den tatsächlich genutzten Delimiter einfügen. // CSV ist nicht gleichbedeutend mit Delimiter := ';' liste.Delimiter := ';'; liste.StrictDelimiter := True; liste.DelimitedText := Datei[i]; if Liste.Count > 19 then // Diese Zeilen ggfls. anpassen an die tatsächlichen Gegebenheiten. begin //Hier teste ich mit Beispieldaten was auch funktioniert tempRecord.StartDate := StrToDateTime('01.01.2020'); tempRecord.EndDate := StrToDateTime('03.01.2020'); tempRecord.Duration := 120; tempRecord.Bez := 'Test'; tempRecord.AuftragNr := 123312; tempRecord.AuftragPosNr := 1; tempRecord.ArbeitsplanPosNr := 1; (* // Sobald ich mit liste.Strings[] echte Daten nutzen möchte sütrzt das Programm ab tempRecord.StartDate := StrToDateTime(liste.Strings[14]); tempRecord.EndDate := StrToDateTime(liste.Strings[15]); tempRecord.Duration := StrToInt(liste.Strings[19]); tempRecord.Bez := liste.Strings[7]; tempRecord.AuftragNr := StrToInt(liste.Strings[9]); tempRecord.AuftragPosNr := StrToInt(liste.Strings[10]); tempRecord.ArbeitsplanPosNr := StrToInt(liste.Strings[2]); *) csvRecords.Add(tempRecord); // csvRecords ist eine TList<dataRecord> und wurde bereits deklariert end else begin MessageDLG(Format('Es wurden nur %d Zeilen für Datensatz %d geliefert. Bitte Dateiformat prüfen.',[Liste.Count,i]),mtError,[mbOk],0); break; end; end; except // Except ist gut, die Fehlermeldung auch auszugeben deutlich besser. on e : Exception do begin MessageDlg(Format('Es ist ein Fehler aufgetreten: %s%s',[#13#13,e.Message], mtError, [mbOK], 0); end; end; finally FreeAndNil(liste); FreeAndNil(Datei); GanttChart1.EndUpdate(); // Repaint end; end; end; Zitat:
Wenn Du da Hilfe möchtest, häng' bitte mal eine entsprechende Datei hier an, dann können wir mit reinschauen und nach 'ner Lösung suchen. Ohne den konkreten Inhalt der Dateien zu kennen, ist eine wirklich zielführende Hilfe nicht möglich. Achso: Weil ich wiedermal deutlich zu lang für meine Antwort benötigt habe, könnten sich Teile davon inzwischen erübrigt haben ;-) |
AW: Problem mit dem Import aus einer csv-Datei in eine StringList
@DeddyH Ja genau das scheint das Problem gewesen zu sein.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:45 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