Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

1

30.07.2014, 15:49

Große Datei, Sonderzeichen ...

Hallo zusammen,

ich habe einen großen Dump vorliegen, welchen ich konvertieren muss. (~13GB UTF-8)
mein Konverter bricht wegen eines Sonderzeichens ab und gibt mir nur die Zeile aus. Aufgrund der Größe kann ich die Datei nur mit less öffnen, dort sehe ich auch das Sonderzeichen, welches mir als '^A' mit weißen Hintergrund angezeigt wird. Damit kann ich ja aber nichts anfangen :dash:
wenn ich grep mit '^A' verwende kriege ich kein Ergebnis.
Aufteilen und den Part mit nano editieren hab ich auch probiert, aber das Sonderzeichen kommt anscheinend öfters vor, und fürs splitten/wieder zusammenfügen/testen brauch ich bei der Größe natürlich Ewigkeiten und ich hab ja keine Ahnung wie oft das Sonderzeichen noch vorkommt ;(
Jemand Tipps wie ich herausfinden kann um was für ein Sonderzeichen es sich handelt um es dann in der gesamten Datei mit sed zu ersetzen ?

LG
SD
...

Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

30.07.2014, 16:04

Das ^A steht für das Zeichen 0x01 (^B wäre 0x02 usw.). Das ist kein darstellbares Zeichen, sondern ein Steuerzeichen. Bist du sicher, dass es sich bei der Datei nur um Text handelt und du diese auch mit dem richtigen Zeichensatz einliest?

SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

3

30.07.2014, 16:32

danke für die Antwort, nein es sollte sich nur um text handeln, Steuerzeichen haben hier nix verloren.
probiere es nun mit "sed 's/\x01/ /g' > FILE" (verwende sed zum ersten mal) dadurch sollte ich die lästigen Biester los werden oder ? :D
...

4

30.07.2014, 17:23

Nein. Eher mit

Quellcode

1
sed -i "s/\x01//g" FILE


MfG
Check

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Checkmateing« (30.07.2014, 17:44)


SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

5

02.08.2014, 10:12

vielen Dank euch beiden für die große Hilfe :thumbsup:


mir ist aber aufgefallen das noch andere Steuerzeichen in dem Dump vorkommen. (^T -> 0x14)
Da ich bei google nur Teilantworten finde und das Ergebnis keinen Fehler enthalten darf:
sed 's/\x//g' -> das sollte alle Steuerzeichen entfernen ? und auch NUR Steuerzeichen ?


LG
SD
...

6

02.08.2014, 11:59

sed "s/\x//g" funktioniert so nicht.
Probier mal j="";for((i=0;i<32;++i))do j=$j"\\x"$(printf "%x\n" $i);done;sed -i "s/[$j]//g" file.
Solltest du aber noch so Zeichen wie ^I, ^J, ^K und ^L behalten wollen, müsste da natürlich noch 'ne if rein.
ála j="";for((i=1;i<32;++i))do if (( i<9 )) || (( i>12 )) ; then j=$j"\\x"$(printf "%x\n" $i);fi;done; sed -i "s/[$j]//g" file
u.U. funktioniert das nicht, dann sollte
j="";for((i=1;i<32;++i))do if ([ "$i" -lt "9" ] || [ "$i" -gt "12" ]) ; then j=$j"\\x"$(printf "%x\n" $i);fi;done; sed -i "s/[$j]//g" file aber gehen, nicht ausprobiert.
Ob es eine effektivere Methode gibt, weiß ich nicht, brauchte ich noch nie, wäre ja allerdings eben gerade für eine derartig große Datei interessant.

MfG
Check

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Checkmateing« (02.08.2014, 16:21)


SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

7

03.08.2014, 11:49

der Konverter zu XML klappt schonmal und im ursprünglichen Dump gibt es so wie ich das sehe jetzt keine Steuerzeichen mehr.

Aber die neue XML wirft beim weiter konvertieren immer noch Probleme:
dump.xml:140258: parser error : Input is not proper UTF-8, indicate encoding !

an der Stelle befindet sich in der XML ein <CE> Tag und ein <9B> Tag (weiß hinterlegt in less)
bei Wikipedia steht nichts zu CE und 9B -> sind das immer noch Steuerzeichen ? :pillepalle:
...

SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

8

04.08.2014, 10:59

Hi anscheinend sind das alles doch noch Steuerzeichen. Mir werden andauernd noch Zeichen -> 94, E9, 9D, 8E, B5 als Fehler ausgegeben das der Text nicht in UTF-8 formatiert ist -_-
Ich habe das hier verwendet:
\x00 -> \xff sollten ja so alle Zeichen entfernt werden.

Quellcode

1
2
3
4
5
6
7
8
#!/bin/bash
j="";
for((i=16;i<255;++i))
do
  j="\\x"$(printf "%x\n" $i)
  echo $j
  sed -i "s/[$j]//g" EXPTEST
done


aber danach wurde zu viel Raus geworfen, der Dump ist nur noch paar MB groß!
Weiß wer welche Zeichen ich in UTF-8 behalten kann/muss, oder kennt wer einen anderen Weg die Datei in UTF-8 zu kriegen ? :dash:
Die Daten werden dringend benötigt ;(

LG
SD
...

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

9

04.08.2014, 11:19

Steuerzeichen sind die Zeichen mit einem Zeichencode von 0 bis einschließlich 31 (bzw. 0x00 bis 0x1F). Alles darüber sind keine Steuerzeichen mehr.
Würdest du dich ein wenig mit Zeichencodierung auskennen, wüsstest du, dass alle Zeichen ab 128 (0x80-0xFF) nicht mehr ASCII-kompatibel sind. Die meisten Zeichenkodierungen nutzen den letzten ungenutzen Bit (und somit die Zeichen von 128 bis 255) für weitere Zeichen, UTF-8 funktioniert da ein wenig anders. Ist das höchstwertige Bit eines Bytes eine 1, wird das Zeichen über mehrere Bytes dargestellt. Die nachfolgenden Bytes müssen dann ebenfalls mit einer bestimmten folge von Bits beginnen und die restlichen undgenutzten Bits werden zur Darstellung des Zeichencodes verwendet.

Du solltest sicher gehen, dass bei der Generierung des Dumps auch _wirklich_ gültiger UTF-8 Code entsteht, da dies offensichtlich nicht der Fall ist. Entweder wird eine andere Kodierung verwendet oder es werden Binärdaten in die Datei geschrieben.
Wenn es sich am Ende um eine XML-Datei handeln sollte, wäre es eine Überlegung wert, die Steuerzeichen durch entsprechende Entitäten zu ersetzen. Ungültige Zeichen einfach zu löschen halte ich für keine gute Idee, da so wahrscheinlich eher Symptome verschleiert werden, als dass das eigentliche Problem behoben wird. (Und wie bereits geschrieben vermute ich, dass die Generierung der Datei grundsätzlich nicht funktioniert.)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige