Schrift
[thread]10837[/thread]

Zeilenweise Datei einlesen

Leser: 7


<< >> 10 Einträge, 1 Seite
Gast Gast
 2007-11-20 13:19
#102641 #102641
Hoffe ich bin hier richtig ? ;)

Eigentlich ist Thematik recht simple, ich möchte ein einfaches Textfile einlesen und dann zeilenweise ausgeben.

folgender code, sollte das recht einfach erledigen:

Code: (dl )
1
2
3
4
5
6
 
open (FILE, "< $joblist_file") || die "Can't open $joblist_file! $!\n";
while (<FILE>)
{
print "job $_\n";
}


bzw.

Code: (dl )
1
2
3
4
5
6
open (FILE, "< $joblist_file") || die "Can't open $joblist_file! $!\n"; 
while (<FILE>)
{
$line = $_
print "job $line\n";
}


demnach sollte er ja Zeile für Zeile mit dem String "job" ausgeben. Ausgabe ist aber "job zeile" gefolgt von den weiteren zeilen allerdings ohne den jobstring.
ich hab dann mal folgendes probiert.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
open (FILE, "< $joblist_file") || die "Can't open $joblist_file! $!\n";  
@file = <FILE>;
close FILE;

my $counter = 0;
my $acounter = @file;

print"arraysize $acounter\n";
foreach $line (@file)
{
print "count $counter\n";
print "$line\n";
$counter++;
}


$counter wird nach ablauf des Codes auf 1 gesetzt.
$acounter hat die Größe von 1.

Imho die Datei wird nicht zeilenweise sondern als ein Block eingelesen. Eine weitere Idee war explizit einen Zeilentrenner ($/ = "\n\r";) zu definieren, hatte aber auch keine
Auswirkung. Desweiteren hab ich es mit verschieben Textfiles (windows und ux) probiert - immer das gleiche Ergebnis.

Grüße

Benny
Gast Gast
 2007-11-20 13:21
#102643 #102643
added:

ich bräuchte allerdings jede einzelne Zeile, da ich diese innerhalb einer schlaife gegenprüfen muss.. lt. den tutorials, Büchern etc. die hier im Netz rumschwirren,
sollte das so eigentlich funktionieren..
renee
 2007-11-20 13:34
#102644 #102644
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wo (welches OS) wurde die Datei erstellt und wo wird die Datei eingelesen?

Probier mal $/ auf "\r\n" (und nicht umgekehrt) zu setzen...

Notfalls kannst Du die Datei erst "slurpen" (alles auf einmal einlesen) und dann splitten...

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
my @lines;
{
    local $/;
    open my $fh, '<', $datei or die $!;
    my $content = <$fh>;
    @lines = split /\r?\n/, $content;
}

print "Line: $_\n" for @lines;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Struppi
 2007-11-20 13:34
#102645 #102645
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Welchen Zeilentrenner hat den die Datei?
Gast Gast
 2007-11-20 16:15
#102652 #102652
Die Dateien wurden solwohl unter win als auch unter ux erstellt und getestet.
Das Script wird später ebenso unter beiden BS laufen müssen.

@struppi: dei test datei ist eindeutig ux codiert

@ renee: slurp n slice war die Lösung, danke...

Also das problem scheint die version inkompatibilität zu sein. Auf den UX kisten läuft noch 5.6.1.....

ein windows test mit den scripts aus dem ersten post funktionierte tadellos..

Danke euch...
Struppi
 2007-11-21 13:04
#102701 #102701
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
unter Linux: LF
unter Win: CR + LF

und auf dem jeweiligen System ist \n das obige.

D.h. wenn du eine Textdatei mit dem Linuxzeilentrenner hast, kannst du diese unter Linux mit deinem obigen Beispiel ohne Probleme Zeilenweise einlesen.
Selbst unter Windows klappt es bei mir Problemlos eine Linuxdatei Zeilenweise einzulesen.

Dein Problem ist, dass du explizit eine Leerzeile im Code eingefügt hast:
print "job $_\n";

Da ist es kein Wunder, dass du eine Leere Zeile hast wenn du ein Newline schreibst.
renee
 2007-11-21 13:25
#102705 #102705
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Struppi+2007-11-21 12:04:46--
Dein Problem ist, dass du explizit eine Leerzeile im Code eingefügt hast:
print "job $_\n";

Da ist es kein Wunder, dass du eine Leere Zeile hast wenn du ein Newline schreibst.


Er hat nicht gesagt, dass immer eine Leerzeile kommt, sondern dass nur einmal das "job" dasteht und dann der ganze Inhalt der Datei (ohne dass vor jeder Zeile das "job" steht).
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Struppi
 2007-11-21 14:25
#102713 #102713
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Dann stimmen die Newlinezeichen nicht. Wenn ich eine Datei mit LF einlese (auch unter Windows) wird diese Zeilenweise mit dem obigen code eingelesen.
renee
 2007-11-21 14:29
#102716 #102716
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das sollte eigentlich nicht gehen... Hattest Du die Datei vorher in einem Editor unter Windows geöffnet?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Struppi
 2007-11-21 17:28
#102739 #102739
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Natürlich mit einem der die verschiedenen Formate beherrscht, beim Mac format ging es nicht.
<< >> 10 Einträge, 1 Seite



View all threads created 2007-11-20 13:19.