Perl Code - Zeilenweise einlesen - Werte speichern ---- Debian

Gast #2596904
Lesenswert?

Ich hab mir ein Perl Skript geschrieben, welches mir als erstes eine 
Textdatei zeilenweise einliest.

Anschließend sollte er jede Zeile überprüfen.

Überprüfung:
Was zwischen Leerzeichen ist, speichert er im Array druff ab.

Ich hab das Programm free "wegen dem Arbeitsspeicher" in die Datei 
test.txt umgeleitet "free > test.txt"

Jedoch funktioniert das Programm nicht optimal...ich bekomme keine Werte 
zwischen den Leerzeichen angezeigt.

Vielleicht weis jemand von Euch wo der Fehler liegt.

Ich hab $i = 1; genommen, da ich es erstmal bei der ersten Zeile 
ausprobieren wollte.

Cu Andy


Hier der code:


#!/usr/bin/perl
@druff = ();
my $puffer;
$wert = 0;
$prell_leer = 0;
$prell_zeichen = 0;
@text = ();
$datei = "test.txt";
open (in,"<$datei") || die $!;
while (<in>)
{
$a = $a + 1 ;
print $_;
$text[$a] = $_;
}
close in;

$i = 1;
for($ii=0; $ii < length($text[$i]) ; $ii++)
  {
    if (substr($text[$i],$ii,1) eq " ")
    {

    }
    else
    {
    $puffer = $puffer + substr($text[$i],$ii,1) ;
      $zwischenwert = $ii +1;
      if (substr($text[$i],$zwischenwert,1)  eq " ")
      {
        $weiter = $weiter + 1;
        $druff[$weiter] = $puffer;
        $puffer = "";
      }
    }

  }

for($ii=0; $ii < $weiter ; $ii++)
{
  print $druff[$ii];
  print "\n";
}
Gast #2596910
Lesenswert?

und die Ausgabe, was dabei heraus kommt.
Wiegesagt verwurschtele ich gerade nur die erste Zeile, daher $i = 1;


root@iconnect-armel-squeeze:/home/andreas# ./uff.pl
             total       used       free     shared    buffers 
cached
Mem:        253544     245324       8220          0       3672 
190172
-/+ buffers/cache:      51480     202064
Swap:       195580        244     195336
             total       used       free     shared    buffers 
cached

0
0
0
0
Gast #2596922
Lesenswert?

Hab mal allen Variabelen, strings, arrays richtig deklariert

#!/usr/bin/perl
@druff = ();
my $puffer;
$wert = 0;
$prell_leer = 0;
$weiter = 0;
$prell_zeichen = 0;
$a = 0;
$ii = 1;
@text = ();
$datei = "test.txt";
open (in,"<$datei") || die $!;
while (<in>)
{
$a = $a + 1 ;
print $_;
$text[$a] = $_;
}
close in;

$i = 1;
for($ii=1; $ii <= length($text[$i]) ; $ii++)
  {
    if (substr($text[$i],$ii,1) eq " ")
    {

    }
    else
    {
    $puffer = $puffer + substr($text[$i],$ii,1) ;
      $zwischenwert = $ii +1;
      if (substr($text[$i],$zwischenwert,1)  eq " ")
      {
        $weiter = $weiter + 1;
        $druff[$weiter] = $puffer;
        $puffer = "";
      }
      if ($ii == length($text[$i]))
      {
        $weiter = $weiter + 1;
        $druff[$weiter] = $puffer;
        $puffer = "";
      }
    }

  }

for($ii=1; $ii <= $weiter ; $ii++)
{
  print $druff[$ii];
  print "\n";
}


Die Ausgabe:
root@iconnect-armel-squeeze:/home/andreas# ./uff.pl
             total       used       free     shared    buffers 
cached
Mem:        253544     245324       8220          0       3672 
190172
-/+ buffers/cache:      51480     202064
Swap:       195580        244     195336
0
0
0
0
0
0

Also die erste Zeile hat 6 Wörter...aber warum 6 Nullen?

substr() funktioniert nicht richtig.
Gast #2596933
Lesenswert?

andy schrieb:
> for($ii=1; $ii <= length($text[$i]) ; $ii++)

sicher <=
ich glaub Perl beginnt ab 0

das ganze Programm sollte ein Einzeiler sein.
Dein Paradigma passt eher zu Pascal oder C.
1
$ echo 'hallo "du" liebe "welt"' | python -c "import sys, re; print re.findall(r'\".*?\"', sys.stdin.read())"
2
['"du"', '"welt"']

lerne lieber etwas sauberes, Ruby oder Python
wenn Perl, dann Perl6 (ohne Perl5 Balast)
Gast #2596934
Lesenswert?

Es funktioniert jetzt endlich..

#!/usr/bin/perl
use strict;
use warnings;
my @druff = ();
my $puffer;
my $wert = 0;
my $prell_leer = 0;
my $weiter = 0;
my $prell_zeichen = 0;
my $a = 0;
my $ii = 1;
my $i = 1;
my @text = ();
my $datei = "test.txt";
my  $zwischenwert = 0;
open (in,"<$datei") || die $!;
while (<in>)
{
$a = $a + 1 ;
print $_;
$text[$a] = $_;
}
close in;

$i = 1;
for($ii=1; $ii <= length($text[$i]) ; $ii++)
  {
    if (substr($text[$i],$ii,1) eq " ")
    {

    }
    else
    {
    $puffer .= substr($text[$i],$ii,1) ;
      $zwischenwert = $ii +1;
      if (substr($text[$i],$zwischenwert,1)  eq " ")
      {
        $weiter = $weiter + 1;
        $druff[$weiter] = $puffer;
        $puffer = "";
      }
      if ($ii == length($text[$i]))
      {
        $weiter = $weiter + 1;
        $druff[$weiter] = $puffer;
        $puffer = "";
      }
    }

  }

for($ii=1; $ii <= $weiter ; $ii++)
{
  print $druff[$ii];

}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren