Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Perl/CGI » Zeilennummern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
13.02.2007, 14:53 Uhr
~Alfredo
Gast


Sorry, ich meine natürlich 0xd 0xa bzw. 0xa oder eben 13 10 bzw. 10.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
13.02.2007, 16:19 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Jo, chomp schneidet Leerzeilen ab. Unter Windows \r\n unter Mac \r und unter Unix \n. Wenn das letzte Zeichen besiepilsweise ein "b" ist, schneidet chop das ab, chomp nicht - da "b" kein newline ist.

Ersetzte das
Code:
if (!$line)
einfach mal durch
Code:
if($line =~ m/^\s+$/s)

--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
13.02.2007, 18:41 Uhr
Bruder Leif
dances with systems
(Operator)


Ahem...


Code:
if ($line =~ /^\s*$/)


--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
13.02.2007, 20:32 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Hmm. Ich hab oben vergessen zu schreiben, das er chomp weglassen sollte. Ansonsten Sollte es so heißen wie du es schriebst
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
14.02.2007, 09:28 Uhr
~Alfredo
Gast


Hallo zusammen,

vielen Dank für eure Hilfe. Das Programm macht jetzt endlich, was ich will.
Hier die Lösung.


Code:
#!/usr/bin/perl
use strict;
use warnings;

my $file = '/cygdrive/d/Perl/test.txt';
my $counter = 0;
my $line = 0;

# open file for reading
open(FILE_HANDLE, "<", $file) || die "Error: $!";

# read the file line per line
while( $line = <FILE_HANDLE> )
  {
# if it is an empty line then print "\n"
    if( $line =~ /^\s*$/ )
      {
        print "\n";
      }
# otherwise print a counter in the form 001: , 002: , ... before each line
    else
      {
        print sprintf("%3.3d", $counter++) . ": " . $line;
      }
}

#close file
close(FILE_HANDLE);



Nun aber noch ein paar Frage:
1.) Wenn ich den Ausdruck /^$/ verwende, so klappt es nicht. Ich bin mir aber ganz sicher, dass es wirklich eine leere Zeile ohne whitespaces und tabs ist. Warum klappt es nur, wenn ich noch \s* dazunehme?

2.) Hier wurde vor die Variablendeklaration ein my geschrieben. Bislang habe ich es immer ohne gemacht und es hat trotzdem funktioniert. Was ist der Unterschied?


Vielen Dank schonmal
Alfredo
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
14.02.2007, 09:39 Uhr
Pler
Einer von Vielen
(Operator)


1. \s* erschlägt eben spaces, (\t,<Leerzeichen>,\n)
2. my musst du nur nehmen, wenn du use strict oben hinschreibst. Solltest du immer verwenden, da Perl sonst zum Beispiel auch nicht initialisierte Variablen als Parameter in Funktionen zulässt. Hilft eben Tippfehler zu vermeiden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ Perl/CGI ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: