Jesco: Sonderzeichen in Textdatei Datenbanken (Perl u.a.), No. 2

Beitrag lesen

tust Du. Deine Zusammenfassung ist veröffentlichungsreif.

Danke für die Blumen :)

Wie wäre es mit dem Tabulator?

Nun, der scheint mir ja nun auch ein häufig vorkommendes Zeichen zu sein. Ich habe jetzt mal in eine ASCII-Tablle geschaut und dort das Zeichen 'Group Separator' (Oktalwert \035) gefunden. Ich schätze dieses Zeichen wird in einem Standardtext genau so wenig auftauchen wie \036.

Richtig. Eventuell möchtest Du in diesem Satz "Zeichen" durch "Zeichenkette" ersetzen, das könnte die Geschichte noch einfacher machen. Ich wüsste beispielsweise nicht, wie ich ohne mittleren Aufwand mit meinem Texteditor \036 eingeben sollte.

Nun, ich verwende den Editor WinEdt (http://www.winedt.com/). Der stellt freundlicherweise Steuerzeichen wie \035 und \036 nicht alle als Kästchen dar sondern farbig unterlegt und voneinander unterscheidbar. Ich kopiere dann einfach das \035-Zeichen aus dem Datensatz (irgendwo taucht es schon auf) und mache einen Suchlauf im neu einzufügenden Text: in den Ersetzen-String kopiere ich das Zeichen per Copy&Paste, der Finden-String lautet '>' (> entspricht Zeilenumbruch, bei RegEx). Danach kann ich den String in den Datensatz kopieren.

Wie ist es eigentlich bei Binärdateien gelöst, z.B. in Word?

Word-Dateien basieren auf XML. Das Verfahren ist übrigens patentiert - arme, kranke Welt.

Wenn ich das dann richtig verstehe wird dann bei Word also auch eine Maskierungstechnik angewandt?!

Ich habe jetzt zwei CGI-Scripte geschrieben, die meiner Aufgabe schon recht nahe kommen und zitiere die wichtigen Stellen (wenn jemand das komplette Script sehen möchte, poste ich es auch gern):

CGI-Script zum Schreiben:
...
my $inputString = "Zeile1\nZeile2\036Zeile2\nZeile3";  # Beispiel für Text
$inputString =~ s/\035//g;   # Verwenden von \035 ist verboten -> wird einfach gelöscht
$inputString =~ s/\036//g;   # Verwenden von \036 ist verboten -> wird einfach gelöscht
$inputString =~ s/\n/\035/g;   # Ersetzen von Zeilenumbrüchen durch \035
...
print DATEI "Zelle 11\036$inputString\036Zelle 13\036\n";   #Schreibe Daten
...

CGI-Script zum Auslesen:
...
open (FileHandler, "$argDataFile") || &print_table_not_found();
    foreach(<FileHandler>)
    {
      my @entrydata;
      @entrydata = split('\036', $_);
...
      $cellValue=$_;
      $cellValue =~ s/\035/<br>/g;   #replace \035 with linebreak
...

Als 'linebreak' ist für die Darstellung in HTML <br> sinnvoll, aber natürlich kann man hier auch \n verwenden.

Gruß,
Jesco