Schrift
[thread]9622[/thread]

Zeilenumbruch konvertieren ->?: ASCII-Datei von Win <-> Unix

Leser: 1


<< >> 7 Einträge, 1 Seite
youngalcapone
 2003-10-05 21:12
#96105 #96105
User since
2003-08-14
185 Artikel
BenutzerIn
[default_avatar]
Aloha!
Wie konvertiert ihr die Zeilenumbrüche in ASCII-Dateien, wenn man sie zwischen Linux und Windows (und umgekehrt) transportiert?
Giebts da einen kleinen Trick, n kleines PerlProgramm oder auch nur einen Befehl oder sowas?
Danke
Gruss, Dave
betterworld
 2003-10-05 21:18
#96106 #96106
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Viel Trick ist nicht dabei. In Unix ist ein Zeilen umbruch "\n", in Windows ist es "\r\n". Also, was macht man:

Windows -> Unix:
Code: (dl )
cat foo.txt | tr -d '\r' > foo

oder mit Perl:
Code: (dl )
s/\r//g

oder, um ganz auf Nummer sicher zu gehen:
Code: (dl )
s/\r\n/\n/g


Unix->Windows:
Code: (dl )
s/\n/\r\n/g


Ist das nicht in den FAQ?
havi
 2003-10-05 21:34
#96107 #96107
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Code: (dl )
\r?\n # um auf Nummer sicher zu gehen...
betterworld
 2003-10-05 21:41
#96108 #96108
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=havi,05.10.2003, 19:34]
Code: (dl )
\r?\n # um auf Nummer sicher zu gehen...
[/quote]
Das ist ja nun etwas uebertrieben :)
Ob man nun \r\n oder \r?\n durch \n ersetzt, kommt doch aufs Gleiche heraus.
DS
 2003-10-05 23:02
#96109 #96109
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
Man kann auch so lustige Sachen wie s/\n/\n/g hernehmen... schaut auf den erstn Blick ziemlich sinnlos aus, gell? ;)

Aber es geht, um z.b. auf einem Windows-System Sachen von Unix nach Windows zu konvertieren... ich schätze sogar, daß man damit allgemein alles auf das System konvertiert, auf dem man das Script ausführt...

Die "Ausgabe" von \n ist ja BS-spezifisch, und auf der Match-Seite erlaubt er scheinbar die gängigen Varianten...
Dubu
 2003-10-06 08:48
#96110 #96110
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ein \n ist unter Unix/Linux und Windows ein Linefeed, also chr(10).
Davon kann man sich ganz einfach ueberzeugen:
Code: (dl )
print ord "\n";

Einzig beim Einlesen oder Schreiben einer nicht mit binmode() als binaer deklarierten Datei oder Pipe wird zwischen CRLF und LF umgewandelt.

Deine Ersetzung, DS, ist wirklich eine Null-Operation. Sie wuerde aber magischerweise "funktionieren", wenn du auf einem Windowssystem eine Unixdatei mit binmode() einliest und dann im Textmodus schreibst, weil dann beim Einlesen \n = \012 = LF = Unix Zeilentrenner erhalten bleibt und beim Schreiben \n => \015\012 => CRLF umgewandelt wird.

Edit: Das Einlesen unter Binmode ist nicht einmal erforderlich, da ja auch im Textmode ein LF ein LF bleibt. Somit reicht es, eine Unix/Linux-Datei unter DOS/Windows einzulesen und gleich wieder zu schreiben, damit die Zeilenenden geaendert werden. Umgekehrt klappt das natuerlich nicht.\n\n

<!--EDIT|Dubu|1065423867-->
youngalcapone
 2003-10-07 02:32
#96111 #96111
User since
2003-08-14
185 Artikel
BenutzerIn
[default_avatar]
Strat hat hier http://board.perl-community.de/cgi-bin....3;st=30
diesen Einzeiler gepostet:
Code: (dl )
perl -i.bak -pe "s/\n/\r\n/g" dateiname.pl
Das wandelt die Unix-Zeilenenden in Windows-Zeilenenden um...
den muss ich morgen grad mal ausprobieren!\n\n

<!--EDIT|youngalcapone|1065479853-->
<< >> 7 Einträge, 1 Seite



View all threads created 2003-10-05 21:12.