Nowe posty

Autor Wątek: [Perl] uzupelnienie wierszy 0  (Przeczytany 4416 razy)

Gosik

  • Gość
[Perl] uzupelnienie wierszy 0
« dnia: 2012-11-10, 15:17:10 »
Mam plik liczby.txt, w ktorych znajduja sie liczby. Wiersze sa roznej dlugosci, dlatego tez chcialabym te krotsze uzupelnic na koncu zerami.
1. Na poczatku zliczylam ile jest wyrazow w kazdym wierszu i zapisalam do tablicy @col,
2. Wyznaczylam najwieksza liczbe z tej tablicy $max,
3. Teraz probuje wypelnic wiersze zerami:

open (W, '>>liczby.txt'); while () {
  $line=$_;
  print $line ;
 $row=$row+1;

 foreach (@col){    
    if ($_<$max){    
      $diff=$max-$_;
   $line=$line." 0 " x $diff ;
    }
 }

close(W);
print "ilos linii $row \\n";

 }
close(W);
Czy moglabym liczyc na Wasze wskazowki jak to zrobic?

Gosik

  • Gość
[Perl] uzupelnienie wierszy 0
« Odpowiedź #1 dnia: 2012-11-10, 15:37:05 »
Jeszcze jedno mam pytanie. Jak mozena wczytac dane z pliku o natseujacej postaci:
1 3 4 5 6
2 3
2 19 22 309 12 1

Jak mozna wczytac te wiersze do tablicy i kolejno jak mozne je wyswieltlic, aby nie znajdowaly sie w jednej linii?
Moze wowczas bylby mozna wykozystac funkcje push, by dopisac zera do poszczegolnych wierszy?

Gosik

  • Gość
[Perl] uzupelnienie wierszy 0
« Odpowiedź #2 dnia: 2012-11-11, 14:56:44 »
Mam teraz inny pomysl, jak to zrobic.

my $num = "123";
$num = sprintf("%06d ", $num);
$num=~ tr//0/;
Jednakze nie wiem, jak to zrobic, by zera byly dopisywane na koncu linii, a nie na poczatku.
Macie moze na to jakis pomysl?

xavery

  • Gość
[Perl] uzupelnienie wierszy 0
« Odpowiedź #3 dnia: 2012-11-12, 15:10:47 »
Cytat: Gosik
Mam plik liczby.txt, w ktorych znajduja sie liczby. Wiersze sa roznej dlugosci, dlatego tez chcialabym te krotsze uzupelnic na koncu zerami.
1. Na poczatku zliczylam ile jest wyrazow w kazdym wierszu i zapisalam do tablicy @col,
2. Wyznaczylam najwieksza liczbe z tej tablicy $max,
3. Teraz probuje wypelnic wiersze zerami:

open (W, '>>liczby.txt'); while () {
  $line=$_;
  print $line ;
 $row=$row+1;

 foreach (@col){    
    if ($_<$max){    
      $diff=$max-$_;
   $line=$line." 0 " x $diff ;
    }
 }

close(W);
print "ilos linii $row \\n";

 }
close(W);
Czy moglabym liczyc na Wasze wskazowki jak to zrobic?
Wyczuwam nawyki programistyczne z C:)
Tak naprawdę to nie do końca wiem co chcesz osiągnąć. Jaki jest format wejściowy i co ma być na wyjściu. Twój drugi komentarz świadczy o tym, że na wejściu w jednej linii jest lista liczb. Czy na wyjściu ma być uzupełnienie ciągiem zer do najdłuższego wiersza, czy też jest jakaś stała liczba znaków na której kończy się linia. Jeśli ta pierwsza opcja to musimy najpierw wiedzieć jaka jest długość najdłuższego wiersza a więc musimy wczytać (lub przeiterować) cały plik a w następnym kroku uzupełniać do zadanej wielkości. W drugim przypadku wystarczyłoby przeiterowanie całego pliku i uzupełnienie zerami do jakiejś stałej, zafiksowanej długości. Np.:

use warnings;
use strict;

use constant TOTAL => 80;

while (my $line=<>){
  chomp $line;
  print $line . "0" x (TOTAL - length($line)) . "\\n";
  }
Powyższa procedura ma również zastosowanie dla opcji wyrównania do najdłuższego wiersza. Wówczas zamiast stałej TOTAL należy użyć długości najdłuższego wiersza w pliku.