Stringlist verschluckt Zeichen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
niederrheiner
Beiträge: 87
Registriert: Sa 19. Jan 2008, 17:21
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Rheinberg

Stringlist verschluckt Zeichen

Beitrag von niederrheiner »

Hallo an Alle,
ich möchte eine Zeile in ihre Einzelteile zerlegen. Das mache ich mit:

Code: Alles auswählen

...
sl := TStringlist.Create;     
sl.Delimiter:= ' ';
sl.DelimitedText:=sz;
...
sl.free
...


Das klappt auch im Prinzip. Nur, mir ist aufgefallen, wenn ich die folgende Zeile:

Code: Alles auswählen

Trec_Blatt = record

bearbeite, und wieder ausgebe:

Code: Alles auswählen

for i:= 0 to sl.count - 1 do begin
        sl.GetNameValue(i, aname, awert);
        zw := zw + ' ' + awert;
    END;
    showmessage(zw);

das das Gleichheitszeichen (=) fehlt. Die Ausgabe erfolgt vor dem sl.free.

Woran liegt das? Habt Ihr eine Idee?

Bis dann ...
MfG
Günter

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Stringlist verschluckt Zeichen

Beitrag von gocher »

Durch DelimitedText schreibst Du nicht "Trec_Blatt = record" in eine Zeile sondern erzeugst drei Zeilen in der Stringlist
1: Trec_Blatt
2: =
3: record
In 1 steht dann nur der Name "Trec_Blatt",
in 2 steht nur das Zuordnungszeichen also weder Name noch Wert
und in 3 steht wieder nur ein Name "record".

Ich gehe davon aus Du möchtest folgendes:

Code: Alles auswählen

sl := TStringlist.Create; 
sl.Add('Trec_Blatt = record');
...
for i:= 0 to sl.count - 1 do
begin
  sl.GetNameValue(i, aname, awert);
  zw := zw + #13#10 + aname + '=' + awert;
end;
showmessage(zw);
...
sl.Free;

Du fügst der StringListe eine Zeile "Trec_Blatt = record" hinzu und anschließend kannst Du dann das Werte-Paar auslesen, der Name steht vor dem Zuordnungszeichen und der Wert dahinter, das Zuordnungszeichen liest Du allerdings nicht mit der Methode GetNameValue aus, das ist aber auch nicht der Sinn und Zweck dieser Methode!

Viel Spaß!
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

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

Re: Stringlist verschluckt Zeichen

Beitrag von theo »

niederrheiner hat geschrieben:Woran liegt das? Habt Ihr eine Idee?


Du mischst hier zwei verschiedene Dinge.
DelimitedText und Name-Value-Paare haben nicht viel miteinander zu tun.
Da ich nicht ganz genau verstehe, was dein Ziel ist, halt ich mich mal mit Vorschlägen zurück.

niederrheiner
Beiträge: 87
Registriert: Sa 19. Jan 2008, 17:21
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Rheinberg

Re: Stringlist verschluckt Zeichen

Beitrag von niederrheiner »

Hallo Gocher,
danke für Deine Antwort.
Durch DelimitedText schreibst Du nicht "Trec_Blatt = record" in eine Zeile sondern erzeugst drei Zeilen in der Stringlist
1: Trec_Blatt
2: =
3: record
In 1 steht dann nur der Name "Trec_Blatt",
in 2 steht nur das Zuordnungszeichen also weder Name noch Wert
und in 3 steht wieder nur ein Name "record".


genauso möchte ich es haben. Nun möchte ich Zeile für Zeile auslesen und wieder ausgeben. Der Code ist Teil eines Sourcecode-Formatierers. Ich möchte die eingelese Sourcezeile formatiert wieder ausgeben. Z.B. soll in der Beispiel-Zeile das Gleichheitszeichen (=) farbig dargestellt werden. Mit anderen Zeilen klappt dieses Verfahren schon ganz gut. Nur bei dieser Zeile ist mir das Fehlen des Gleichheitszeichen aufgefallen.

Wie lese ich denn jetzt die Stringliste aus, damit ich das von mir gewünschte Ergebnis erhalte? Denn theo schrieb
Du mischst hier zwei verschiedene Dinge.
DelimitedText und Name-Value-Paare haben nicht viel miteinander zu tun.


Bis dann ...
MfG
Günter

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: Stringlist verschluckt Zeichen

Beitrag von Scotty »

Setze mal die Eigenschaft StrictDelimiter der Stringliste auf true. Dann wird das Gleichzeichen, Kommas und ähnliches nicht als Delimiter gezählt.
http://lazarus-ccr.sourceforge.net/docs ... miter.html

PS: Dein Vorgehen klingt eigenartig. Vielleicht magst du ja Alternativen diskutieren.

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

Re: Stringlist verschluckt Zeichen

Beitrag von theo »

Scotty hat geschrieben:PS: Dein Vorgehen klingt eigenartig. Vielleicht magst du ja Alternativen diskutieren.


Würde ich auch vorschlagen. Vllt. geht es ja mit Synedit und TSynAnySyn oder sowas viel einfacher?

niederrheiner
Beiträge: 87
Registriert: Sa 19. Jan 2008, 17:21
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Rheinberg

Re: Stringlist verschluckt Zeichen

Beitrag von niederrheiner »

Hallo Scotty,
erstmal danke für Deine Antwort. Was ist denn so eigenartig an meinem Vorgehen? :o
Ich möchte doch nur Sourcecode, z.B. Pascal, einlesen und formatiert ausdrucken. Soll heissen, Keywörter werden fett gedruckt, Kommentar in grün u.s.w.. Ein Teil davon klappt ja schon. Ich behaupte nicht, das der von mir eingeschlagene Weg der Königsweg ist. Natürlich bin ich für Alternativen offen. Nur bin ich in Pascal noch nicht so sicher.

@theo, auch Dank an Dich. Ich weiss nicht wie ich die von Dir genannten "Komponenten" einsetzen soll. Ich kenne sie nicht. Müßte mich da einlesen. Gibt es irgendwo gescheite deutsche Beschreibungen oder Beispiel, mein Englisch ist nicht sooooo berauschend. Zeig mir einen Bereich wo ich graben soll, dann grabe ich auch :)

Bis dann ...
MfG
Günter

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

Re: Stringlist verschluckt Zeichen

Beitrag von theo »

niederrheiner hat geschrieben:@theo, auch Dank an Dich. Ich weiss nicht wie ich die von Dir genannten "Komponenten" einsetzen soll. Ich kenne sie nicht. Müßte mich da einlesen. Gibt es irgendwo gescheite deutsche Beschreibungen oder Beispiel, mein Englisch ist nicht sooooo berauschend. Zeig mir einen Bereich wo ich graben soll, dann grabe ich auch :)


Die Lazarus IDE ist das Beispiel. Der IDE-Editor selber benutzt Synedit mit Pascal Syntax Highlighting.
Du kannst dort auch "Als HTML Exportieren" und mit dem Browser drucken. (SynExportHTML)

http://wiki.freepascal.org/SynEdit/de

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Stringlist verschluckt Zeichen

Beitrag von gocher »

Hallo niederrheiner,
den Beitrag: Pascal Quelltext - HTML Syntax Highlighting hatte ich erst vor kurzen hier im Forum diskutiert und meine Lösung die auf meiner Website im Einsatz ist habe hier auch hier: http://www.lazarusforum.de/viewtopic.php?f=10&t=6044&start=17 eingestellt.

Es Folgt ein Beispiel zu Deiner Wunschvariante, allerdings wäre das nicht mein Weg, denn um ein ordentliches Syntax Highlighting hin zu bekommen, sollte das Trennen in die Bestandteile nicht über eine StringList realisiert werden, da Du nicht voraussetzen kannst das immer Leerzeichen vorhanden sind!

Code: Alles auswählen

sl := TStringlist.Create;     
sl.Delimiter :=  ' ';
sl.StrictDelimiter := true;
sl.DelimitedText := 'Trec_Blatt = record';
...
for i:= 0 to sl.count - 1 do
begin
  sPart := sl.Strings[i];
  if sPart = '=' then sPart := '<font color="red">'+sPart+'</font>'
  else if sPart = ':' then sPart := '<font color="green">'+sPart+'</font>'
  sLine := sLine + sPart;
end;
showmessage(sLine); //HTML
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Antworten