[SOLVED][Perl] Parsowanie pliku

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

[SOLVED][Perl] Parsowanie pliku

Post autor: witek23 »

Witam:)

Zrobiłem skrypt .cgi który używa do obliczeń octave. Problem jest taki, iż po podaniu do skryptu wektora np: A =[3 4 4]. otrzymuje wynik w postaci:
GNU Octave, version 3.0.1 Copyright (C) 2008 John W. Eaton and others. This is free software; see the source code for copying conditions. There is ABSOLUTELY NO WARRANTY; not even for MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, type `warranty'. Octave was configured for "i486-pc-linux-gnu". Additional information about Octave is available at http://www.octave.org. Please contribute if you find this software useful. For more information, visit http://www.octave.org/help-wanted.html Report bugs to (but first, please read http://www.octave.org/bugs.html to learn how to write a helpful report). For information about changes from previous versions, type `news'. A = 3 4 4
Chciałbym żeby tekst "powitalny" octave był w jednej zmiennej, a wektor A w innej. W moim skrypcie .cgi zawarłem taki kod służący do parsowania, niestety nie działa:

Kod: Zaznacz cały

@tekst = system("octave plik");
foreach $tekst (@tekst)
{
($witaj, $wartosc) = split(/`news'./, $tekst);
}

print "$witaj";
print "$wartosc";

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] Parsowanie pliku

Post autor: el.pescado »

http://www.network-theory.co.uk/docs/oc ... ve_20.html
--silent
--quiet
-q
Don't print the usual greeting and version message at startup.

EDIT:
A co do perla, funkcja system zwraca kod zakończenia programu, nic więc dziwnego, że nie można znaleźć tam żadnych wektorów;) Do przechwytywania wyjścia programu użyj operatora ` albo funkcji open.

Ponadto, w wyrażeniach regularnych, kropka (.) ma specjalne znaczenie, więc jeżeli chce się dopasować dosłowny znak kropki, należy go poprzedzić znakiem odwrotnego ukośnika (\).
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] Parsowanie pliku

Post autor: witek23 »

Dzięki el.pescado, jak wrócę z pracy to sprawdzę ten sposób.
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] Parsowanie pliku

Post autor: leon1313 »

Po krótce:
Jeżeli zamierzasz poddac parsowaniu w perlu jakiekolwiek dane pochodzące z programów zewnętrznych, rób to za pomocą potoku i funkcji open:

Kod: Zaznacz cały

#!/usr/bin/perl
use strict;  #  wymaga deklarowania zmiennych
my $progs_data=q(cat /etc/passwd |);
my @one_line_array; # tu potrzymamy posztkowae dane

open(LINE, $progs_data);
while(<LINE>){
 chomp(); #usunięcie ewentualnych znaków końca lini
 @one_line_array=split(/:/, $_);
 print "User: $one_line_array[0] , UID $one_line_array[2]  \n";
}
"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!!!"
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: [SOLVED][Perl] Parsowanie pliku

Post autor: witek23 »

Dzięki wszystkim za pomoc problem rozwiązałem bez parsowania sposobem el.pescado.

Pozdrawiam!
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Google [Bot] i 9 gości