[Allegro] Trick 44: Textdateien umcodieren

Bernhard Eversberg ev at biblio.tu-bs.de
Di Mai 29 08:06:41 CEST 2007


Trick 44: Dateien umcodieren

Aufgabe: Schnell mal eben eine Textdatei von ASCII nach ANSI umcodieren.
          Oder allgemeiner: vom Codesystem X ins Codesystem Y.

Warum: Der alte DOS-Zeichencode ASCII gerät zunehmend auf den abstei-
        genden Ast. Aber auch ANSI ist nicht von hohem Ewigkeitswert,
        denn Unicode dringt immer weiter vor.

Früher schrieb man dafür eine Exportparameterdatei mit den
entsprechenden p-Befehlen, mußte aber zuerst einen Import machen, um
die Textdatei zeilenweise in Datensätze zu verwandeln, die dann z.B.
nur die Kategorie #20 oder #u1 enthielten, um diese dann sofort mit
den Exportparametern wieder ausgeben zu können. Wer hat denn schon
heute noch solchen Durchblick? Oder man griff murrend zu einem
Fremdwerkzeug oder einer Skriptsprache. Nicht jedem stehen aber solche
Wege offen...

Eine "Textdatei" - damit sind Dateien gemeint, die in Zeilen angeordnet
sind, mit Codes 13 10 (oder nur einem von beiden) als Trennung.

Lösung:
Das Einzige, was man jetzt noch braucht, ist eine Liste von p-Befehlen.
Davon sind mehrere schon als Tabellen vorhanden:
(Wenn man hineinschaut, sieht man gleich, wie solche Tabellen aussehen
müssen und wie man sie erstellen und modifizieren kann. Bearbeiten kann
man sie mit Notepad o.a.)

asciansi.apt   ASCII -> ANSI
ansiasci.apt   ANSI -> ASCII
d.apt          ASCII -> RTF
d.npt          ANSI -> RTF
d-utf8.apt     ASCII -> UTF-8
d-utf8.npt     ANSI -> UTF-8  [auch f. HTML]

p-htm.apt      ASCII -> HTML

durtf.apt      UTF-8 -> ASCII
durtf.npt      UTF-8 -> ANSI

Wenn man nun mit B.CFG arbeitet, intern ASCII hat und nach ANSI
umcodieren will?  Dann Kopie machen:  asciansi.apt -> asciansi.bpt

Wenn die richtige Tabelle erst feststeht, geht es ganz leicht,
sofern man das "final release" von V27.2 hat:

1. Füllhorn / Alles von A-Z / Umcodierung einer Textdatei
    (Aufgerufen wird dann  filecode.flx)

2. Man wird informiert:
    "Sie wählen jetzt zuerst eine Datei aus. Diese wird zeilenweise
    gelesen und geschrieben"
    Dateiauswahlbox erscheint, Datei wählen (evtl. zuerst Verzeichnis
    wechseln)

3. Frage beantworten, die danach kommt:
    "Neuer Name für die Datei?"
    Dateiname und -pfad ist beliebig

4. Und es kommt noch eine Dateiauswahlbox:
    "Wählen Sie eine Codetabelle"
    Aus der Liste die korrekte Tabelle (siehe oben) wählen

Verarbeitung wird ausgeführt, Endemeldung:

... verarbeitet, Neue Datei: ...
... Zeilen, ... Bytes

FERTIG!

   ------------------------------------------------------------------

FLEXperten wollen mehr wissen: Was ist der Trick dabei?

Der FLEX  filecode.flx  ist abgeleitet von der allgemeineren
Vorlage  file.flx  (ASCII-Datei zeilenweise lesen+schreiben),
die es schon seit 2004 gibt. Neu ist in V27.2 die Möglichkeit,
Umcodierbefehle zu nutzen: Befehl  xcode ...  (h xxcode)
Hier die entscheidenden Zeilen:

export p i-1
   i-1.apr laden. Diese wird aber nicht als solche gebraucht,
   das ist der Trick, sondern nur, weil man eine Tabelle dazuladen
   will, in der die Umcodierbefehle stehen:

var "Wählen Sie eine Codetabelle|*." K1 "pt"
fnam
   Diese Tabelle zu den Exp.Parametern laden
export t

   Danach kann man in der Schleife :loop, die jeweils eine Zeile mit get
   aus der Datei liest, dies sagen:

xcode xp
wri
wri n

und es werden die p-Befehle der Exportparameter zum Umcodieren benutzt,
die umcodierte Zeile ausgegeben und ein Zeilenvorschub hinterdrein.




Mehr Informationen über die Mailingliste Allegro