[gelöst]StrToDate klemmt

Für Fragen von Einsteigern und Programmieranfängern...
Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

[gelöst]StrToDate klemmt

Beitrag von Marsmännchen »

Hi,

ich versuche grad folgendes:

Code: Alles auswählen

Datum:= StrToDate(Parser.CurrentCellText);

Bricht mit einer Fehlermeldung ab, dass das nicht als Datum erkannt wird. Ich habe schon versucht, einen Dateseparator bzw. eine Art FormatString anzuhängen

Code: Alles auswählen

Datum:= StrToDate(Parser.CurrentCellText, '.');

Code: Alles auswählen

Datum:= StrToDate(Parser.CurrentCellText, 'dd.mm.yyyy');

Klappt aber auch nicht. Passende Tutorials im Internet habe ich bisher nicht finden können. Nur allgemeine Beschreibungen der Funktion. Ist bestimmt nur ne Kleinigkeit, aber inzwischen habe ich ein Brett vor dem Kopf. Könnt ihr mir mal kurz auf die Sprünge helfen?

Dankeschön

Achso: Die Datei ist eine csv in UTF8-Codierung, meine Sourcecode-Datei auch. Falls das wichtig ist.
Zuletzt geändert von Marsmännchen am Mi 9. Nov 2016, 11:55, insgesamt 1-mal geändert.
Ich mag Pascal...

wp_xyz
Beiträge: 4888
Registriert: Fr 8. Apr 2011, 09:01

Re: StrToDate klemmt

Beitrag von wp_xyz »

Solange du nicht sagst, wie diese Datum-Strings (Parser.CurrentCellText) aussehen, kann dir keiner helfen.

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: StrToDate klemmt

Beitrag von Marsmännchen »

uuups... sorry.

Sie haben das Format '01.01.2016'.
Ich mag Pascal...

Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: StrToDate klemmt

Beitrag von Nixsager »

Schaue mal nach ob in 'Parser.CurrentCellText' wirklich nur das Datum steht.

Bei mir funktioniert folgender Test:

Code: Alles auswählen

 
var
   DateNow: TDate;
   StringNow: UTF8String;
begin
     StringNow := '1.1.0001';
     DateNow := StrToDate(StringNow);
     Form1.Caption := DateToStr(DateNow);
end;
 
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: StrToDate klemmt

Beitrag von marcov »


Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: StrToDate klemmt

Beitrag von Marsmännchen »

Nixsager hat geschrieben:Schaue mal nach ob in 'Parser.CurrentCellText' wirklich nur das Datum steht.

Bei mir funktioniert folgender Test:

Code: Alles auswählen

 
var
   DateNow: TDate;
   StringNow: UTF8String;
begin
     StringNow := '1.1.0001';
     DateNow := StrToDate(StringNow);
     Form1.Caption := DateToStr(DateNow);
end;
 


Meiner Ansicht nach schon. Ich habs im Debugger gecheckt, dort steht '01.01.2016'. Ich hab nochmal die Codierung gecheckt, es ist wirklich UTF-8. Ich habe sogar die csv-Datei nochmal roh in Notepad++ aufgesetzt mit ein paar Beispieldatensätzen. Immer meckert der Compiler, dass es sich nicht um ein gültiges Datum handeln soll.
Ich mag Pascal...

Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: StrToDate klemmt

Beitrag von Nixsager »

Hast du mal einen Testcode der den Fehler hervor ruft?
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: StrToDate klemmt

Beitrag von Marsmännchen »

marcov hat geschrieben:http://www.freepascal.org/docs-html/rtl/dateutils/scandatetime.html

Danke für den Tip. Habe ich ausprobiert. Jetzt meckert der Compiler: Pattern mismatch char "d" at Position 1.
Ich habe es mit folgendem Pattern probiert:

Code: Alles auswählen

Datum:= ScanDateTime('dd.mm.yyyy',Parser.CurrentCellText);

Ich verstehe nicht, warum das Pattern an dieser Stelle crasht, ich habe nochmal nachgesehen: für Day mit führender 0 ist die korrekte Angabe 'dd'. Wenn ich also einen String mit dem Inhalt '01.01.2016' in ein Date verwandeln will, müsste das doch mit dem Pattern 'dd.mm.yyyy' gehen, oder nicht?
Ich mag Pascal...

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: StrToDate klemmt

Beitrag von marcov »

Geht hier gut:

Code: Alles auswählen

 
uses dateutils;
 
var datum :tdatetime;
s : string;
begin
  s:='01.01.2010';
  Datum:= ScanDateTime('dd.mm.yyyy',s);
  writeln(s,' = ', datum);
end.


Es ist etwas anders dann, unsichtbare Karakter im String?

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: StrToDate klemmt

Beitrag von Marsmännchen »

Hmmm....

Ich habe die csv folgendermaßen erstellt: es war eigentlich eine Writer-Tabelle, die ich nach Calc kopiert und dann als CSV(Text) gespeichert habe. Ich habe sie sicherheitshalber nochmal in Editor aufgemacht und nachgesehen. Dann habe ich sie von dort nochmal abgespeichert und dabei darauf geachtet, dass es eine UTF-Codierung ist. WEgen der Probleme habe ich im Editor nochmal eine Dummytabelle gemacht, um sicher zu gehen, dass das kein LibreOffice-Kram drinne ist. Ich hänge diese Tabelle hier mal an (Edit: geht nicht, weil csv-Dateien nicht erlaubt sind. Ich habe sie als .txt umgeschraubt. Bitte ggf. wieder zur csv machen), ebenso wie die .pas-Datei, die mir Probleme macht. Vielleicht findet ihr was. Auf die übrigen Dateien habe ich jetzt erstmal verzichtet (da kämen neben lfm auch noch ico, ini Dateien dazu und für die Ausführung müsste auch noch CSVDocumentpackage eingebunden werden).
Zuletzt geändert von Marsmännchen am Mi 9. Nov 2016, 10:16, insgesamt 1-mal geändert.
Ich mag Pascal...

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: StrToDate klemmt

Beitrag von Marsmännchen »

... ich hab jetzt doch mal alles zusammengepackt...
Aber nochmal der Hinweis: Das Ding braucht das CSVDocumentpackage
Dateianhänge
MeinCode.zip
(159.79 KiB) 48-mal heruntergeladen
Ich mag Pascal...

wp_xyz
Beiträge: 4888
Registriert: Fr 8. Apr 2011, 09:01

Re: StrToDate klemmt

Beitrag von wp_xyz »

Deine Datei enthält einen Byte-Order-Marker (BOM). Ich habe die Datei mit Notepad++ in eine UTF-8-Datei ohne BOM konvertiert --> kein Problem. Oder du entfernst den BOM per Code. Dazu findest du einige Beispiele hier im Forum

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: StrToDate klemmt

Beitrag von Marsmännchen »

Danke, das war's. Da wäre ich alleine nicht drauf gekommen.
Ich mag Pascal...

wp_xyz
Beiträge: 4888
Registriert: Fr 8. Apr 2011, 09:01

Re: [gelöst]StrToDate klemmt

Beitrag von wp_xyz »

Was ich noch erwähnen sollte: CSVDocument gehört seit FPC 3.0 zum Lieferumfang. Du brauchst also das Package CSVDocument nicht mehr explizit einzubinden. Allerdings wurde der Parser-Teil (der von dir verwendet wird) in die unit CSVReadWrite ausgelagert. --> uses csvreadwrite (statt "uses csvdocument").

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: [gelöst]StrToDate klemmt

Beitrag von Marsmännchen »

Dankeschön für die Info. Ich hatte mich an dem Onlinetutorial für CSVDocument langgehangelt.
Ich mag Pascal...

Antworten