Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7470[/thread]

Neue Zeile in Dateien (Seite 2)

Leser: 2


<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten
pq
 2005-11-15 22:27
#60139 #60139
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=J-jayz-Z,15.11.2005, 09:28]Auf der Konsole:
Code: (dl )
perl -we 's|\n|\r\n|' datei.ini
[/quote]
hast du das mal ausprobiert?
ich denke, du meinst
perl -pi -e's/\n/\r\n/' datei
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
J-jayz-Z
 2005-11-16 00:10
#60140 #60140
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=pq,15.11.2005, 21:27][quote=J-jayz-Z,15.11.2005, 09:28]Auf der Konsole:
Code: (dl )
perl -we 's|\n|\r\n|' datei.ini
[/quote]
hast du das mal ausprobiert?
ich denke, du meinst
perl -pi -e's/\n/\r\n/' datei[/quote]
Was schreibe ich für ein Müll ... ?
es ist
Code: (dl )
user@host~>perl -ne 's|\n|\n\r|' datei.txt

Wobei das ohne |g ist, das es wirkt wie while(<>) und das nur Zeilenweise ausgibt. Und da jede Zeile nur ein Zeilenumbruch hat, hat sich das erledigt .
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
betterworld
 2005-11-16 00:54
#60141 #60141
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Nimm lieber -p statt -n, sonst hast Du nicht viel davon ;-)
pq
 2005-11-16 01:22
#60142 #60142
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=J-jayz-Z,15.11.2005, 23:10][quote=pq,15.11.2005, 21:27]hast du das mal ausprobiert?
ich denke, du meinst
perl -pi -e's/\n/\r\n/' datei[/quote]
Was schreibe ich für ein Müll ... ?
es ist
Code: (dl )
user@host~>perl -ne 's|\n|\n\r|' datei.txt
[/quote]
ähm, nein, ist es nicht... das gibt gar nichts aus und verändert auch die datei nicht.
-pi tut es, aber das schrieb ich ja schon.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
lichtkind
 2005-11-16 11:08
#60143 #60143
User since
2004-03-22
5680 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
wenn sie aus einem elf dump extrahiert können leicht auch mal EOL symbole mittendrin vorkommen, deswegen hab ich die version ohne regex favorisiert. mich würde auch interessieren wieso eure substitude ohne g auskommt?
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Dubu
 2005-11-16 12:54
#60144 #60144
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=lichtkind,16.11.2005, 10:08]wenn sie aus einem elf dump extrahiert können leicht auch mal EOL symbole mittendrin vorkommen,
[/quote]
Wie das?
Und wenn, wie sollte man zwischen einem "echten" und einem "zu den Daten gehoerigen" Newline unterscheiden?

Quote
mich würde auch interessieren wieso eure substitude ohne g auskommt?

Wenn man diesen Aufruf:
Code: (dl )
perl -pi -e 's/\n/\r\n/' datei.txt

unter Unix/Linux macht, dann wird die Datei sowieso zeilenweise abgearbeitet (wegen -p), und da gibt's nicht mehr als ein Newline pro Zeile.

Machte man den gleichen Aufruf unter Windows, dann wuerde die ganze Datei als eine Zeile eingelesen (weil ja nach <CR><LF> als Zeilentrenner gesucht wird) und man braeuchte einen /g-Modifier, muesste aber auch die Ersetzung aendern oder die Datei im Binaermodus bearbeiten, da sonst aus "\r\n" die Bytefolge <CR><CR><LF> wuerde. Schliesslich wird jedes Newline beim Schreiben einer Textdatei unter Win/DOS in <CR><LF> gewandelt.

Tatsaechlich kann man dieses Verhalten unter Win/DOS ausnutzen und im Textmodus ersetzen:
Code: (dl )
perl -pi.bak -e 's/\n/\n/g' datei.txt

Diese recht unverstaendliche Variante wandelt tatsaechlich die in der Datei vorhandenen einzelnen (und deshalb beim Einlesen nicht als Zeilenumbruch erkannten) <LF> in <CR><LF> um, auch wenn sie so aussieht, als taete sie gar nichts. (Diese Loesung hat sogar den kleinen Vorteil, dass man sie problemlos mehrfach auf eine Datei anwenden kann, ohne dass weitere <CR> eingefuegt werden. Das .bak ist noetig, da unter Windows irgendwie das in-place-edit nicht funktioniert.)

Wie man sieht, ist es eine schlechte Gewohnheit, das perl-interne Newline-Zeichen \n als Synonym fuer ein Linefeed \012 bzw. \cJ zu benutzen. Die bessere Schreibweise waere also:
Code: (dl )
perl -pi.bak -e 's/\012/\015\012/g' datei.txt

oder auch
Code: (dl )
perl -pi.bak -e 's/\x0A/\x0D\x0A/g' datei.txt

wobei das .bak und das /g nur unter Windows benoetigt werden, der Code aber sowohl unter Unix/Linux als auch Windows funktioniert.


Naeheres s. auch perlport, Abschnitt "Newlines"
lichtkind
 2005-11-16 13:05
#60145 #60145
User since
2004-03-22
5680 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
ich hab es als hexdump verstanden der ja sehr gut beliebige bytewerte enthalten kann. und grade weil man die hinterher nicht von EOL unterscheiden kann muss man gleich beim generieren die "richtigen" EOL produzieren. da ja aber selbst beim einlesen unter win ja "fake-EOL" die in wirklichkein binärcode sind auftauchen können bräuchte man einen stärkeren EOL marker für das script das es dann weiterverarbeitet.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
sesth
 2005-11-16 15:35
#60146 #60146
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Also langsam frag ich mich, ob das Problem wirklich mit Perl zu tun hat. Wenn ich unter Linux eine Datei erzeuge, dann hat die halt die dort üblichen line endings. Wenn die Datei dann (im text mode) auf ein Windows-System übertragen wird, erledigt das Umsetzen normalerweise die Transfersoftware. Sogar ZIP-Software kann beim Extrahieren die line endings anpassen. Mein Editor kann das übrigens auch. Warum sollte man (oder Frau :D) sich also die Mühe machen, auf dem lokalen System schon die line endings eines Fremdsystems zu erzeugen?
Gruß
Thomas
Strat
 2005-11-16 18:20
#60147 #60147
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zugriff via samba? oder automatische synchronizer, die keinen textmodus verwenden?

ich habe mal ein stueck software, das sowohl unter linux/solaris als auch windows identisch laufen sollte und aus einer menge modulen bestand, komplett mit unix-zeilenendungen versehen, damit es sowohl unter windows als auch unter unix/linux einfach entpackt werden konnte und laeuft. Umgekehrt haette es zwar auch fast funktioniert (perl selbt haette das gefressen), aber der shebang nicht, und einen link auf den unix-systemen namens /usr/bin/perl<CR> wollte ich dann doch nicht anlegen ;-)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
sesth
 2005-11-16 18:28
#60148 #60148
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Manchmal ist es auch von Vorteil, dass Windoof keinen shebang kennt ;) .
Gruß
Thomas
<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten



View all threads created 2005-11-14 19:23.