Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Text/ASCII-Datei in ASCII-Code umwandeln (https://www.delphipraxis.net/44322-text-ascii-datei-ascii-code-umwandeln.html)

xineohp 17. Apr 2005 19:36


Text/ASCII-Datei in ASCII-Code umwandeln
 
moin,

Ich habe hier eine Text/Ascii Datei, in der einige Zeichen enthalten sind, die das Notepad nicht darstellen kann (kleine Rechtecke).
Wenn ich die Datei in ein Memo lade werden die Zeichen als Fragezeichen dargestellt. Wenn ich sie in eine Stringliste lade und mit Ord() in Ascii-Code umwandle dann wird â (#226), € (#128) und © (#169) ausgegeben. Aber der Test (die Zeichen wieder in die Datei schreiben) schlägt fehl. Es handelt sich bei der Datei um eine von Adobe InDesign CS erstellte XML Datei, in InDesign stellen die Zeichen einen Zeilenumbruch da. Allerdings stehen sie an (meines Erachtens) falscher/ungültiger Stelle nämlich nicht zwischen Tags, das ganze scheint also irgendwie irregulär zu sein. Allerdings brauche ich die Zeilenumbrüche und muss also wissen welche Zeichen ich in die Datei schreiben muss. Ich hoffe ihr habt eine Idee wie ich das Problem angehen könnte.

Marcward.de 17. Apr 2005 21:51

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
Wo ist das Problem?
Habe ich irgenwie den Punkt verpasst?

Wenn Du ein XML-Dokument lesen/schreiben möchtest, solltest Du eine entsprechende Bibliothek (z.B. MS-XML) einsetzten (-> diese beachtet dann auch vorhandene Zeichensatztbeschreibungen).

Ist das Einlesen der Datei mit dem Parser nicht möglich - so handelt es sich wahrscheinlich um ein "nicht XML-Konformes" Format.

xineohp 17. Apr 2005 21:53

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
lassen wir den XML-Teil mal außen vor, ich möchte eigentlich nur alle in der Datei vorhandenen Zeichen mit ihrem ASCII-Code auflisten.

Hansa 17. Apr 2005 22:36

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
Auswahl der wichtigsten Zeiichen :

Delphi-Quellcode:
function AnsiToIBMAscii(s: string): string;
var
  i: integer;
begin
  Result := '';
  for i := 0 to Length(s) do
  begin
    case s[i] of
      #196: Result := Result + #142; //Ä
      #214: Result := Result + #153; //Ö
      #220: Result := Result + #154; //Ü
      #228: Result := Result + #132; //ä
      #246: Result := Result + #148; //ö
      #252: Result := Result + #129; //ü
      #223: Result := Result + #225; //ß
    else
      Result := Result + s[i];
    end;
  end;
end;

xineohp 18. Apr 2005 17:24

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
Liste der Anhänge anzeigen (Anzahl: 1)
hm,

anscheinend habe ich mein Problem nicht richtig verdeutlichen können. Dann greife ich jetzt halt zur Brachialmethode :mrgreen: im Anhang befindet sich die besagte Datei. Öffnet sie mit Firefox und sagt mir für was die Fragezeichen stehen oder öffnet sie mit dem IE bzw. Notepad und sagt mir für was die Kästchen stehen.

Muetze1 18. Apr 2005 17:29

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
Moin!

Meines Erachtens sind das Standard Zeilenvorschübe in UTF-8 korrekt kodiert.

MfG
Muetze1

xineohp 18. Apr 2005 17:31

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
ha,

Zitat:

Standard Zeilenvorschübe in UTF-8 korrekt kodiert
und woran kann man/ich das erkennen? bzw. wie sind sie kodiert, wie kann ich das simulieren/in die Datei schreiben? Vielen Dank für deine Hilfe.

Muetze1 18. Apr 2005 17:42

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
Moin!

Wozu überhaupt? Laut XML Standard ist es völligst egal was zwischen den Tags steht - das sollen die Clients etc überlesen - und meiner z.B. macht das auch ohne Probleme. Daher ist die Frage ob du wirklich diese Zeichen brauchst? Wenn es eine richtige XML Datei sein soll, dann schreibe es ganz normal ohne Firlefanz in die Datei und schreibe ohne nicht UTF-8 als encoding rein sondern ISO-8859-15 und gut ist.

MfG
Muetze1

xineohp 18. Apr 2005 17:58

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
tja, das Dumme ist nur, dass nicht ICH die Datei erstellt habe, sondern Adobe InDesign CS und das bietet nur UTF-8, UTF-16 und Shift-JIS als Kodierung an. Die besagten Zeichen stellen tatsächlich einen Zeilenumbruch da, und genau den brauche ich auch zwingend, warum er nicht zwischen Tags steht kann ich auch nicht sagen :|

Muetze1 18. Apr 2005 18:15

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
Moin!

Wieso er nicht dazwischen steht? Laut XML Standard sind alle Zeichen mit ASCII Code < 32 nicht zu beachten und zu überlesen. Im Normalfall braucht kein CR/LF drinne sein, das ist nur für den Nutzer, damit er dies besser lesen kann.

Ok, dann lass Adobe dies doch schreiben - aber was kümmert dich das? Wo liegt denn nun dein genaues Problem? Also Adobe schreibt die Datei, selber eine schreiben willst du laut der Reaktion auf meinen vorherigen Post auch nicht und Lesen willste die XML wohl irgendwie auch nicht - also frage ich mich, was soll den mit den Zeichen sein und was genau willst du nun wissen?

MfG
Muetze1

xineohp 18. Apr 2005 18:35

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
Das Problem ist folgendes: Es handelt sich bei dem Ganzen um die Profil Seiten eines/meines ;) Abibuches. Ich habe ein Layout, in das die Daten von 60 Personen eingefügt werden muss. Die Daten liegen in normalen Textdateien txt/doc vor. Da InDesign diese nette XML-Import Funktion hat, dachte ich mir halt, ich schaf die Daten in eine XML-Datei, importiere die in InDesign und fertig is. Das hat den vorteil, dass ich mich um den ganzen Layout-Teil nur EIN mal kümmern müsste. Leider baut InDesign diese ominösen Zeichen in die XML-Datei ein (beim Exportieren natürlich :stupid: irgendwoher muss ich ja wissen wie das XML-Dokument aufgebaut sein muss) die wohl Zeilenumbrüche darstellen. Wenn ich sie aus der XML-Datei lösche bzw. nicht reinschreibe verrutscht leider mein ganzes Layout :cry:

Muetze1 18. Apr 2005 19:02

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
Moin!

Jetzt kommen wir der Sache doch schon näher. Und was spricht dagegen ein Delphi Programm zu schreiben welches die Datei so rauschreibt und dabei die komischen Sonderzeichen mit gleichem Code an der Stelle x,y einzufügen wo sie auch Adobe reinpackt und an den anderen Stellen die benötigten Namen/Informationen?

MfG
Muetze1

xineohp 18. Apr 2005 19:20

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
Zitat:

mit gleichem Code
meine Rede, nur leider kenne ich den Code nicht bzw. versuche ihn hier herauszufinden :zwinker:

Muetze1 19. Apr 2005 00:02

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin!

Wozu? Die Codes die du in deiner Beispieldatei findest kannst du doch 1:1 wieder rausschreiben. Es sind nur Bytes mit einem Wert und wenn du nun wieder Bytes mit dem gleichen Wert schreibst, erhälst du nun auch wieder die gleichen Zeichen.

Die Darstellung der Zeichen ist schnuppe, das ändert nix an den Werten, die sind gleich.

Ich habe dazu mal meinen heissgeliebten Total Commander genommen, die test.xml angezeigt mit F3 und in die Hex Ansicht umgeschaltet und bekam folgendes --- womit doch dann alles geklärt sein müsste, oder?

MfG
Muetze1

xineohp 19. Apr 2005 16:33

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
vielen Dank für deine Bemühungen.

Eine kleine Frage hätte ich noch wie kann ich die besagten Zeichen in eine Datei schreiben? (ich hab in Delphi bisher nur mit Stringlisten und Textdateien gearbeitet)

Muetze1 19. Apr 2005 18:00

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
Moin!

Wie hast du dies denn bei den Textdateien gemacht?

MfG
Muetze1

xineohp 19. Apr 2005 18:20

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
mit Stringlisten :angel2:

Hansa 19. Apr 2005 22:27

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
Zitat:

Zitat von xineohp
...Eine kleine Frage hätte ich noch wie kann ich die besagten Zeichen in eine Datei schreiben?...

Was soll die Frage ? XML sind Textdateien, sonst nichts.

xineohp 19. Apr 2005 22:32

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
auf die Gefahr hin, dass ich mich entgültig lächerlich mache, aber wie soll ich die Zeichen in eine Textdatei/in einen String schreiben wenn ich ihren (ASCII-)Code nicht kenne?

Muetze1 19. Apr 2005 22:53

Re: Text/ASCII-Datei in ASCII-Code umwandeln
 
Moin!

Zitat:

Zitat von xineohp
auf die Gefahr hin, dass ich mich entgültig lächerlich mache, aber wie soll ich die Zeichen in eine Textdatei/in einen String schreiben wenn ich ihren (ASCII-)Code nicht kenne?

1. Dank des HexDumps hast du doch den Code! Was brauchst du denn noch?

2. In der Liste einen Code hinzufügen: einfach beim String basteln ein Chr(Code) einfügen oder wenn es statischer Text ist einfach mit der Doppelroute einleiten.

Beispiel um in dem String das ASCII Zeichen mit dem Code 85 einzufügen:
a)
Delphi-Quellcode:
sl.Add('Dies ist ein TestString mit dem komischen Charakter ' + Chr(85) + ' im String');
b)
Delphi-Quellcode:
sl.Add('Dies ist ein TestString mit dem komischen Charakter ' + #85 + ' im String');
3. Du kannst wahrscheinlich die StringListe nutzen, die wird wahrscheinlich keine Probleme machen. Ansonsten hast du noch die Möglichkeit zum einen z.B. über den moderneren TFileStream und ansonsten noch über die alten Pascal Routinen (siehe Hilfe AssignFile(), Reset(), ReWrite(), Read(), ReadLn(), Write(), WriteLn(), Eof(), CloseFile(), Seek())

4. Noch Fragen?

MfG
Muetze1

PS: endgültig kommt vom Ende... :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz