perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 19
Click for quality!




12.02.2012 / 03:46

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragZeilenumbruch, regexp, chomp & Co.
Seitenanfang
Mahlzeit ...

Folgende Situation:

Ich lese eine Datei ein. Diese enthaelt in jeder Zeile jeweils einen Wert.

open(WAFERFILE, "<", "$filename") || die "PANIC: ($!)";
@zeilen = <WAFERFILE>;

Nun enthaelt das Array @zeilen alle einzelnen Zeilen der Datei. inkl. den ungewuenschten CR/LF.

Diese versuchte ich nun mittels eines kleinen Regexp's zu entfernen:

$kuerzel = $zeilen[9] =~ s/\015\012|\015|\012//g;
$datum = $zeilen[10] =~ s/\015\012|\015|\012//g;
$zeit = $zeilen[11] =~ s/\015\012|\015|\012//g;

... wobei mir dann 'print()' nur "1,1,1" ausgibt.

Folgender Code funktioniert allerdings (fuer mich unverstaendlicherweise)

$kuerzel = $zeilen[9];
$datum = $zeilen[10];
$zeit = $zeilen[11] ;
$kuerzel =~ s/\015\012|\015|\012//g;
$datum =~ s/\015\012|\015|\012//g;
$zeit =~ s/\015\012|\015|\012//g;

Gleiches Gilt uebrigens auch fuer chomp() und tr.

Ich habe einige Zeit (2 Jahre) Perl nicht mehr nutzen koennen. Befinde mich afu dem Weg des wiedererlernens. Sicher habe ich da nur etwas falsch angegangen und diejenigen, die sich oefter damit beschaeftigen, sehen schnell das Missgeschick.

Waere fuer eine Rueckmeldung sehr dankbar.

In diesem Sinne ... happy hacking ;)

Datum: 27.02.2007-02:26

Beitragre: Zeilenumbruch, regexp, chomp & Co.
Seitenanfang
Moin,

chomp(); haut nur die \n weg.
Wenn Du auf Win32-Systemen erstellte Dateien hast, empfehle ich, die \r auch noch zu entfernen, das erspart unerwünschte Effekte auf LINUX-Mashinen ;-)

$line =~ s/\n|\r//;

--roro

Oder ganze Dateien umwandeln:
Q: Wie wandle ich eine UNIX Datei in eine DOS Datei um (ascii)?

A: Wer's braucht ;-)
Die Zeilenumbrüche sind unter UNIX und Co ein NewLine \n
Unter Windows jedoch ein CarriageReturn + NewLine \r\n

Benutze das folgende Script wie folgt auf einer UNIX Plattform
cat unixfile | ux2dos.pl > dosfile

Script ux2dos.pl wandelt die Zeilenumbrüche DOS gefällig
#!/usr/bin/perl

# Unixfile in DOS File...

$/ = undef;
my $body = <STDIN>;
close IN;
$body =~ s/\n/\r\n/g;
print $body;

Das nächste Script kann dazu verwendet werden ein DOSFile in ein UNIXFile zu konvertieren
Mögliche Verwendung: Es wurde eine DOS Datei per FTP im binmode hochgeladen
cat dosfile | dos2ux.pl > unixfile
dos2ux.pl
#!/usr/bin/perl

# DOS File in UNIX File umwandeln

$/ = undef;
my $body = <STDIN>;
close IN;
$body =~ s/\r//g;
print $body;

Datum: 27.02.2007-11:08

Beitragre: Zeilenumbruch, regexp, chomp & Co.
Seitenanfang
System    Hexcode   Dezcode  Oktalcode  Escape-Zeichen   Mnemonic

Unix 0D #10 012 \n LF
MAC 0D #13 015 \r CR
DOS/WIN 0D0A #13#10 015/012 \r\n CRLF

Sorry, vergass, das hier primaer mit Escape-Sequenzen hantiert wird.

Demnach sehe der obige Code in "Escape-ierung" folgendermassen aus:

$kuerzel = $zeilen[9];
$datum = $zeilen[10];
$zeit = $zeilen[11] ;
$kuerzel =~ s/\r\n|\r|\n//g;
$datum =~ s/\r\n|\r|\n//g;
$zeit =~ s/\r\n|\r|\n//g;

Datum: 27.02.2007-11:27

Beitragre: Zeilenumbruch, regexp, chomp & Co.
Seitenanfang
und wieso wird hier das in
 eingeschlossene nicht als solches behandelt?

Datum: 27.02.2007-11:29

Beitragre: Zeilenumbruch, regexp, chomp & Co.
Seitenanfang

$kuerzel = $zeilen[9] =~ s/\015\012|\015|\012//g;

Der Substitutions-Operator gibt die Anzahl der Ersetzungen zurück, deshalb erhälst du '1'.

Du kannst nach open() direkt die folgende Anweisung einbauen.


@zeilen = map { s/\012?\015|\015?\012//g } @zeilen;

Datum: 27.02.2007-14:07

-






-
-