Textdatei suchen und Wert speichern

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
klaus2012
Beiträge: 6
Registriert: Fr 31. Aug 2012, 06:45

Textdatei suchen und Wert speichern

Beitrag von klaus2012 »

Hallo zusammen,

habe eine Pascaldatei die ich bearbeiten muss, ich hoffe ihr könnt mir helfen.

In der Textdatei stehen Parameter wie P35,5 P36,6. Das Programm liest jede Zeile ein und durchsucht diese.
Ich möchte die Werte gerne speichern, da ich diese für eine Verrechnung später brauche.

Der Code den ich geschrieben habe sieht wie folgt aus:

Code: Alles auswählen

if pos('P35',e)>0 then begin
                       writeln(fo,'!!!!!!! HIER habe ich den Parameter P35 gefunden !!!!!!!!');
                       f:=pos('P35',e)+1;
                       p[35]:=f;
                       writeln(fo,'Wert des Parameters P35: ',p[35]:9:3);
                       end;
Nur leider gibt er nicht den Wert 5 aus für P35 sondern 7 und für P35 13. Die Definition der Variablen sieht folgendermaßen aus:

Code: Alles auswählen

p        : array[1..49] of real; { Parameter }
f        : real; 
e        : s125; 
s125     = string[125];
Wie kann ich die Variablen abspeichern bzw. wo liegt mein Fehler. Über Hilfe bin ich sehr dankbar..
Klaus
Zuletzt geändert von Lori am Fr 31. Aug 2012, 10:32, insgesamt 1-mal geändert.
Grund: richtiger Highlighter

indianer-frank
Beiträge: 134
Registriert: So 30. Nov 2008, 21:53

Re: Textdatei suchen und Wert speichern

Beitrag von indianer-frank »

Nur durch die Verwendungen anderer Bezeichnungen wird Falsches nicht richtig: Wenn f und p[35] die Position von 'P35' sind, wird nicht auf magischer Weise durch Voranstellen von 'Wert des Parameters P35' auf einmal etwas anderes (nämlich der Inhalt) daraus. Du mußt schon den Wert aus dem eingelesenen String holen: In erster Näherung so etwas wie e[f]; allerdings mußt Du beachten, daß f die Anfangsposition von 'P35' in e liefert, das Parameterzeichen selbst ist dann e[f+???]. Was ??? ist, bleibt als Übungsaufgabe fürs Wochende.

Kiffi
Beiträge: 37
Registriert: Sa 27. Mär 2010, 11:39
OS, Lazarus, FPC: Windows 7 / Lazarus 1.0
CPU-Target: 32/64 bit

Re: Textdatei suchen und Wert speichern

Beitrag von Kiffi »

Hallo klaus2012,

die Daten liegen also im CSV-Format vor?

Wenn ja, dann schau Dir mal TStringList an. Das dürfte Deine Arbeit ein wenig erleichtern.

Grüße ... Kiffi

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Textdatei suchen und Wert speichern

Beitrag von mschnell »

Und Vorsicht: Lazarus benutzt UTF-8 codierte Strings. Wenn Du p[35] machst bekommst du bei deutschen Texten nicht unbedingt eine druckbares Zeichen (und auch nicht unbedingt das 35ste druckbare Zeichen im String).

Wenn Du so etwas tust musst Du Dich erstmal in Unicode einlesen ( http://en.wikipedia.org/wiki/Unicode" onclick="window.open(this.href);return false; ). Vorsicht: Sehr kompliziert.

Einsteiger sollten so etwas wie p[35] unbedingt vermeiden, solange Lazarus und Free Pascal nicht auf UTF-16 umgestellt wird (kommt sicher, aber wann ....)

Besser verwendest Du ausschließlich copy() mit den Ergebnissen von pos(). Das klappt fast immer.

-Michael

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Textdatei suchen und Wert speichern

Beitrag von Scotty »

mschnell hat geschrieben:Besser verwendest Du ausschließlich copy() mit den Ergebnissen von pos().
copy(p,35,1) ist genauso falsch wie p[35]. UTF8Copy und UTF8Pos aus der Unit LCLProc wären eine Lösung. Allerdings keine gute in Hinsicht auf die eigentliche Frage.

indianer-frank
Beiträge: 134
Registriert: So 30. Nov 2008, 21:53

Re: Textdatei suchen und Wert speichern

Beitrag von indianer-frank »

@Scotty und @mschnell: Eure Vorschlage sind Unsinn, denn p ist ein array[1..49] of real :!:

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Textdatei suchen und Wert speichern

Beitrag von mschnell »

indianer-frank hat geschrieben:p ist ein array[1..49] of real :!:
Da hast Du natürlich recht.

-Michael

Benutzeravatar
theo
Beiträge: 10922
Registriert: Mo 11. Sep 2006, 19:01

Re: Textdatei suchen und Wert speichern

Beitrag von theo »

Typisch mschnell, lässt keine Gelegenheit aus, darauf hinzuweisen wie kompliziert doch Unicode sei.
Auch wenn es eigentlich gar keine Gelegenheit gibt. :lol:

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Textdatei suchen und Wert speichern

Beitrag von mschnell »

Scotty hat geschrieben:copy(p,35,1) ist genauso falsch wie p[35]. UTF8Copy und UTF8Pos aus der Unit LCLProc wären eine Lösung. Allerdings keine gute in Hinsicht auf die eigentliche Frage.
Stimmt. Natürlich darf auch die Länge (falls nicht High(Integer)) und die Position (falls nicht 1) von Copy() keine einfache Konstante sein, sondern muss passend berechnet werden: z. B.:

s1 := 'Ä';
s2 := 'ä';
s3 := 'das Äffchenärmchen';
p1 := pos(s1, s3);
p2 := pos(s2, s3);
s4 := copy(s3, p1, p2-p1);

Dann haben wir das Äffchen isoliert (trotz UTF-8).

-Michael

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Textdatei suchen und Wert speichern

Beitrag von mschnell »

theo hat geschrieben:Typisch mschnell, lässt keine Gelegenheit aus, darauf hinzuweisen wie kompliziert doch Unicode sei.
Auch wenn es eigentlich gar keine Gelegenheit gibt. :lol:
Ja, recht hast Du, da habe ich mich auf das falsche Aas gestürzt. Ich hätte seinen Sourcecode genauer lesen sollen und feststellen müssen, dass er mit Shortstrings arbeitet. Ob die auch Unicode sind, weiß ich nicht.

Aber wie sich im FPC Forum zeigt, wird FPC in absehbarer Zeit den Typ String auf UTF-16 umstellen (so wie Delphi). Dann wird Lazarus folgen (müssen). Für viele (deutsche) Programmierer stellt sich dann die Unicode-Problematik seltener.

Ich bilde mir nicht ein, dass das ein Ergebnis meiner Nögelei ist :P

-Michael

Benutzeravatar
theo
Beiträge: 10922
Registriert: Mo 11. Sep 2006, 19:01

Re: Textdatei suchen und Wert speichern

Beitrag von theo »

mschnell hat geschrieben: Ich hätte seinen Sourcecode genauer lesen sollen und feststellen müssen, dass er mit Shortstrings arbeitet. Ob die auch Unicode sind, weiß ich nicht.
Ich finde es bei dir einfach erschreckend, dass du nach gefühlten 10000 Beiträgen und Diskussionen zum Thema Unicode (und du lässt keine aus) noch immer nicht den geringsten Plan davon hast.

Ob Shortstrings wohl Unicode sind? Denk bitte mal nach, oder lass die Kommentare dazu bleiben.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Textdatei suchen und Wert speichern

Beitrag von mschnell »

theo hat geschrieben:Ob Shortstrings wohl Unicode sind? Denk bitte mal nach, oder lass die Kommentare dazu bleiben.
Denken kann ich bekanntermaßen nicht, aber ausprobieren:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
  s1: String[10];
  s2: String;
  c0, c1, c2: Byte;
begin
  s2 := 'ä';
  s1 := s2;
  c0 := Length(s1);
  c1 := Byte(s1[1]);
  c2 := Byte(s1[2]);
  Caption := IntToHex(c0, 2) + ' ' + IntToHex(c1, 2) + ' ' + IntToHex(c2, 2);
end;
Ergibt 02 C3 A4

Also UTF-8, also keine automatische Umcodierung, also geht das System davon aus, dass shortstrings Unicode codiert sein sollten.

Ich vermute in Delphi sind Shortstrings nicht Unoicode-Codiert. (Longstrings sind ja bekanntermaßen UTF-16, was bei Shortstrings natürlich nicht geht.)

Wenn in Lazarus die Shortsrings also Delphi-kompatibel implementiert wären, müsste eine automatische Konvertierung nach ANSI erfolgen. Also: Auch ShortStrings sind in Lazarus (vermutlich) nicht Delphi-kompatibel.

Soooo blöd ist die Frage wohl doch nicht.

-Michael

Benutzeravatar
theo
Beiträge: 10922
Registriert: Mo 11. Sep 2006, 19:01

Re: Textdatei suchen und Wert speichern

Beitrag von theo »

Ein Shortstring ist /war schon immer/ wird immer sein im Grunde nichts weiter als ein Byte-Array (oder meinetwegen Char-Array) mit max. 256 Elementen.

Insofern ist schon die Frage daneben. Ist ein Byte-Array Unicode?
Es ist so Unicode wie es ein GIF-Bild oder ein WAV-Sound ist.

ABER TU MIR DEN GEFALLEN UND LASS ES JETZT GUT SEIN DAMIT! DANKE!

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Textdatei suchen und Wert speichern

Beitrag von mschnell »

theo hat geschrieben:Ein Shortstring ist /war schon immer/ wird immer sein im Grunde nichts weiter als ein Byte-Array (oder meinetwegen Char-Array) mit max. 256 Elementen.
Unsinn. Dann könnte man nicht MyShortString := MyString schreiben.

( Deine Sucht alles unzulässig zu vereinfachen ist genauso fatal wie meine alles sehr kompliziert zu sehen. )

-Michael
Zuletzt geändert von mschnell am Fr 31. Aug 2012, 15:17, insgesamt 1-mal geändert.

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Textdatei suchen und Wert speichern

Beitrag von creed steiger »

Wenn es eine CSV Textdatei ist könntest du sie hiermit

http://wiki.freepascal.org/CsvDocument" onclick="window.open(this.href);return false;

komfortabel zerlegen.

Antworten