[perl]Odczytywanie pliku tak, aby każda linijka była w innej zmiennej

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
witek23
Sędziwy Jeż
Sędziwy Jeż
Posty: 49
Rejestracja: 31 gru 2008, 11:40
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME

[perl]Odczytywanie pliku tak, aby każda linijka była w innej zmiennej

Post autor: witek23 »

Witam,

Chcę odczytać poniższy plik i "wrzucić" każdą linijkę wraz ze znakami spacji do innej zmiennej:

Kod: Zaznacz cały

(%i1)                    batch(/usr/lib/cgi-bin/nowy)

batching #p/usr/lib/cgi-bin/nowy
                                            3
(%i2)                             diff(x , x)
                                             2
(%o2)                                3 x
Zależy mi na tym, aby w zmiennych zawarte zostały białe znaki spacji, gdyż ustawienie poszczególnych wyrazów rzędów względem siebie ma znaczenia.

Na razie potrafię odczytać plik w ten sposób:

Kod: Zaznacz cały

open(UCHWYT, "plik.txt");
@linie = <UCHWYT>; 
close (UCHWYT);
print @linie;   
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: [perl]Odczytywanie pliku tak, aby każda linijka była w innej zmiennej

Post autor: leon1313 »

Jesli znasz ilosc lini i nie zmienia ona się ( np 4) to proponuję:

Kod: Zaznacz cały

open(UCHWYT, "plik.txt");
$linia1 = <UCHWYT>;  # byc moze jeszcze chomp ($linia1);
$linia2 = <UCHWYT>; 
$linia3 = <UCHWYT>; 
$linia4 = <UCHWYT>; 
close (UCHWYT);
inne przypadki to chyba tylko eval
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
Awatar użytkownika
Struchu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 116
Rejestracja: 23 mar 2008, 19:58
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [perl]Odczytywanie pliku tak, aby każda linijka była w innej zmiennej

Post autor: Struchu »

witek23 pisze:Chcę odczytać poniższy plik i "wrzucić" każdą linijkę wraz ze znakami spacji do innej zmiennej:
(...) Na razie potrafię odczytać plik w ten sposób:

Kod: Zaznacz cały

open(UCHWYT, "plik.txt");
@linie = <UCHWYT>; 
close (UCHWYT);
print @linie;   
No tak - z tym że w ten sposób robisz właśnie to, co Ci jest potrzebne. Każdy element tablicy linie zawiera dokładnie jedną linijkę (ze wszystkimi białymi znakami itp.).
Ma zielone, kocie oczy...
witek23
Sędziwy Jeż
Sędziwy Jeż
Posty: 49
Rejestracja: 31 gru 2008, 11:40
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME

Odp: [perl]Odczytywanie pliku tak, aby każda linijka była w innej zmiennej

Post autor: witek23 »

Struchu pisze:No tak - z tym że w ten sposób robisz właśnie to, co Ci jest potrzebne. Każdy element tablicy linie zawiera dokładnie jedną linijkę (ze wszystkimi białymi znakami itp.).
Rzeczywiście każdy element tablicy zawiera jedną linijkę i to jest ok. Problem jest z białymi znakami, powiedzmy, że jeśli mam 6 spacji i cyfrę 3 to te spacje znikają, a dla mnie są one istotne. W tym wszystkim chodzi o to, że zapis np: x^3 zawiera w jednym wierszu 3 położoną nad x, a w drugim x i wtedy spacje te są istotne, gdyż determinują położenie 3 nad x...
Awatar użytkownika
Struchu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 116
Rejestracja: 23 mar 2008, 19:58
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [perl]Odczytywanie pliku tak, aby każda linijka była w innej zmiennej

Post autor: Struchu »

witek23 pisze:Problem jest z białymi znakami, powiedzmy, że jeśli mam 6 spacji i cyfrę 3 to te spacje znikają, a dla mnie są one istotne.
Hmm, jesteś pewien że znikają? U mnie to wygląda następująco:

Kod: Zaznacz cały

struchu@dark-tower:~$ cat t
#!/usr/bin/perl

open(UCHWYT, "plik.txt");
@linie = ; 
close (UCHWYT);
print @linie[3];
struchu@dark-tower:~$ cat plik.txt
(%i1)                    batch(/usr/lib/cgi-bin/nowy)

batching #p/usr/lib/cgi-bin/nowy
                                            3
(%i2)                             diff(x , x)
                                             2
(%o2)                                3 x


struchu@dark-tower:~$ ./t
                                            3
Ma zielone, kocie oczy...
witek23
Sędziwy Jeż
Sędziwy Jeż
Posty: 49
Rejestracja: 31 gru 2008, 11:40
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME

Odp: [perl]Odczytywanie pliku tak, aby każda linijka była w innej zmiennej

Post autor: witek23 »

Struchu pisze:Hmm, jesteś pewien że znikają? U mnie to wygląda następująco:

Kod: Zaznacz cały

struchu@dark-tower:~$ cat t
#!/usr/bin/perl

open(UCHWYT, "plik.txt");
@linie = ; 
close (UCHWYT);
print @linie[3];
struchu@dark-tower:~$ cat plik.txt
(%i1)                    batch(/usr/lib/cgi-bin/nowy)

batching #p/usr/lib/cgi-bin/nowy
                                            3
(%i2)                             diff(x , x)
                                             2
(%o2)                                3 x


struchu@dark-tower:~$ ./t
                                            3
Faktycznie, jeśli uruchamiać skrypt przez konsolę wszystko jest ok. Tylko zapomniałem napisać, że jest to skrypt .cgi i uruchamiam go przez przeglądarkę. Wszystko zbija mi się w jedną masę, nadal brak białych znaków...
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [perl]Odczytywanie pliku tak, aby każda linijka była w innej zmiennej

Post autor: el.pescado »

Hmm, może użyj tagów <pre>? Język HTML ma tą właściwość, że usuwa "nadmiarowe" białe znaki. Ewentualnie, zmień Content-Type: na text/plain, wtedy przeglądarka nie będzie interpretować otrzymanych danych jako HTML.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości