Codierung von Strings
-
- Beiträge: 5
- Registriert: Di 25. Jan 2011, 11:17
Codierung von Strings
Hallo,
obwohl ich im Programmieren noch sehr unerfahren bin habe ich mir ein ehrgeiziges Ziel gesetzt und möchte gerne folgendes Problem mit Lazarus lösen:
Ich habe eine Textdatei mit ca. 10000 Wörtern die in ISO-8859-15 kodiert ist. Aus dieser Liste möchte ich einzelne Wörter herausnehmen und einem externen Shell-Script als Parameter übergeben. Dieses Shell-Script erwartet den übergebenen String kodiert in ISO-8859-15. Mein System ist allerdings für UTF-8 konfiguriert.
Nun bin ich nach langem Überlegen ehrlich gesagt etwas ratlos. Hat von Euch jemand eine Idee wie ich das angehen könnte?
Freundliche Grüße,
Max
P.S.: Das Shell-Script ist eine Art wrapper für ein Perl Interface (Lingua::DE::Wortschatz) zu einer Datenbank der Uni Leipzig.
obwohl ich im Programmieren noch sehr unerfahren bin habe ich mir ein ehrgeiziges Ziel gesetzt und möchte gerne folgendes Problem mit Lazarus lösen:
Ich habe eine Textdatei mit ca. 10000 Wörtern die in ISO-8859-15 kodiert ist. Aus dieser Liste möchte ich einzelne Wörter herausnehmen und einem externen Shell-Script als Parameter übergeben. Dieses Shell-Script erwartet den übergebenen String kodiert in ISO-8859-15. Mein System ist allerdings für UTF-8 konfiguriert.
Nun bin ich nach langem Überlegen ehrlich gesagt etwas ratlos. Hat von Euch jemand eine Idee wie ich das angehen könnte?
Freundliche Grüße,
Max
P.S.: Das Shell-Script ist eine Art wrapper für ein Perl Interface (Lingua::DE::Wortschatz) zu einer Datenbank der Uni Leipzig.
Re: Codierung von Strings
Normalerweise kannst du mit der Unit LConvEncoding Codierungen umwandeln.
Also etwa so:
s:=ConvertEncoding(s,'ISO_8859-15',EncodingUTF8);
... und umgekehrt.
Also etwa so:
s:=ConvertEncoding(s,'ISO_8859-15',EncodingUTF8);
... und umgekehrt.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Codierung von Strings
@Theo das sollte so heißen: ConvertEncoding(s,'iso88591',EncodingUTF8)
Damit läuft es Prima. Danke für den Tipp.
(Auch wenn es nicht meine Frage war, aber genau das gleiche Problem hatte ich auch seit Tagen).
Damit läuft es Prima. Danke für den Tipp.
(Auch wenn es nicht meine Frage war, aber genau das gleiche Problem hatte ich auch seit Tagen).
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Codierung von Strings
die wörter bekommt man ja einfach raus in dem man den text nach leerzeichen absucht, ein word ist immer durch 2 gekennzeichnet.
Außer am anfang und Ende einer Zeile...
Außer am anfang und Ende einer Zeile...
Code: Alles auswählen
Signatur := nil;
Re: Codierung von Strings
Ja, Ich hatte einen Tippfehler beim Unterstrich (und nicht getestet).pluto hat geschrieben:@Theo das sollte so heißen: ConvertEncoding(s,'iso88591',EncodingUTF8)
Aber das geht beides:
s:=chr($A4);
s:=ConvertEncoding(s,'ISO-8859-15',EncodingUTF8);
oder
s:=ConvertEncoding(s,'iso885915',EncodingUTF8);
Caption:=s;
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Codierung von Strings
Brauchst du da nicht nur den Pfad zum Shell-Script in UTF-8 kodiert vorzuhalten? Die Parameter werden doch so übergeben wie sie ankommen...ThorsteinB hat geschrieben:Ich habe eine Textdatei mit ca. 10000 Wörtern die in ISO-8859-15 kodiert ist. Aus dieser Liste möchte ich einzelne Wörter herausnehmen und einem externen Shell-Script als Parameter übergeben. Dieses Shell-Script erwartet den übergebenen String kodiert in ISO-8859-15. Mein System ist allerdings für UTF-8 konfiguriert.
Für das Betriebssystem ist es doch irrelevant, ob ein Parameter in ISO-8859-15 oder UTF-8 kodiert ist, nur die Darstellung durch die einzelnen Komponenten (Editor der Textdatei, Konsole in der das Script aufgerufen wird, etc.) variiert je nach Annahme des Zeichensatzes.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 5
- Registriert: Di 25. Jan 2011, 11:17
Re: Codierung von Strings
Erstmal herzlichen Dank für die Antworten von theo, pluto und MAC!
Leider hab ich das zunächst nicht hinbekommen und war dann ungeduldig mit einer Lösung. Dazu habe ich mir dann eine Art "workaround" zusammen geschustert der zwar unnötig Rechenzyklen verbraucht, aber bestens funktioniert:
Und Socke, auch Dir ein Dankeschön. Du meinst das ganze müßte auch dann funktionieren, wenn ich sowohl mein temp.sh und script.sh als auch den ganzen Code durch folgendes ersetze?
Nur leider funktioniert das im Moment nicht. Ich speichere es mal als Knobelaufgabe für später ... 
Leider hab ich das zunächst nicht hinbekommen und war dann ungeduldig mit einer Lösung. Dazu habe ich mir dann eine Art "workaround" zusammen geschustert der zwar unnötig Rechenzyklen verbraucht, aber bestens funktioniert:
Code: Alles auswählen
var
F: TextFile;
AProcess: TProcess;
begin
AssignFile(F,'temp.sh');
Rewrite(F);
writeln(F,'#!/bin/bash');
writeln(F,'export LANG="de_DE.ISO-8859-15@euro"');
writeln(F,'rm baseform.txt');
writeln(F,'perl ws Baseform '+Edit1.Text+' | tail -n +5 > temp1');
writeln(F,'iconv -f ISO-8859-15 -t UTF-8 -o baseform.txt temp1');
writeln(F,'rm temp1');
CloseFile(F);
AProcess := TProcess.Create(nil);
AProcess.CommandLine := 'iconv -t ISO-8859-15 -o script.sh temp.sh';
AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
AProcess.Execute;
AProcess.Free;
AProcess := TProcess.Create(nil);
AProcess.CommandLine := 'sh script.sh';
AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
AProcess.Execute;
AProcess.Free;
AssignFile(F,'baseform.txt');
Reset(F);
while not EOF(F) do begin
readln(F,Line1);
Edit2.Text := Line1;
end;
CloseFile(F);
end;
Code: Alles auswählen
var
F: TextFile;
Cmd: String;
AProcess: TProcess;
begin
Cmd:= 'perl ws Baseform '+Edit1.Text+' | tail -n +5 > baseform.txt';
AProcess := TProcess.Create(nil);
AProcess.CommandLine := ConvertEncoding(Cmd,EncodingUTF8,'ISO-8859-15');
AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
AProcess.Execute;
AProcess.Free;
AssignFile(F,'baseform.txt');
Reset(F);
while not EOF(F) do begin
readln(F,Line1);
Line1:= ConvertEncoding(Line1,'ISO-8859-15',EncodingUTF8);
Edit2.Text:= Line1;
end;
CloseFile(F);
end;

-
- Beiträge: 1102
- 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: Codierung von Strings
Für das Betriebssystem macht nur der Bytestream aus. Aber denselben Zeichenkette kann anders sein zwischen UTF-8 und ISO-8859-15Socke hat geschrieben:Brauchst du da nicht nur den Pfad zum Shell-Script in UTF-8 kodiert vorzuhalten? Die Parameter werden doch so übergeben wie sie ankommen...ThorsteinB hat geschrieben:Ich habe eine Textdatei mit ca. 10000 Wörtern die in ISO-8859-15 kodiert ist. Aus dieser Liste möchte ich einzelne Wörter herausnehmen und einem externen Shell-Script als Parameter übergeben. Dieses Shell-Script erwartet den übergebenen String kodiert in ISO-8859-15. Mein System ist allerdings für UTF-8 konfiguriert.
Für das Betriebssystem ist es doch irrelevant, ob ein Parameter in ISO-8859-15 oder UTF-8 kodiert ist, nur die Darstellung durch die einzelnen Komponenten (Editor der Textdatei, Konsole in der das Script aufgerufen wird, etc.) variiert je nach Annahme des Zeichensatzes.