🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
3 messages
3 total messages Started by Piotr Hosowicz Fri, 06 Nov 2009 16:30
Problem z regexpem
#51665
Author: Piotr Hosowicz
Date: Fri, 06 Nov 2009 16:30
82 lines
2659 bytes
Witam Grupę,

Mam takowy problem. Muszę zapisywać pewne informacje z oznaczeniem 
dokładnie godziny i robię to po prostu w pliku tekstowym pod Midnight 
Commanderem (F9 -> Insert date time). Gdybym wiedzial, ze potem 
wyciągnięcie tych informacji będzie problemem to bym zrobil jakiś 
interfejs WWW i napisał coś w PHP. W PERLu nie jestem za mocny.

Ale do rzeczy. Plik wejściowy jest mniej więcej taki:

--- odtąd
$ cat /home/phz/test/sprzyklad.txt
pią, 6 lis 2009, 14:35:11
pią, 6 lis 2009, 14:35:14 uwagi 1
pią, 6 lis 2009, 14:35:19


pią, 6 lis 2009, 14:35:29 uwagi 2
pią, 6 lis 2009, 14:35:44


pią, 6 lis 2009, 14:39:07
pią, 6 lis 2009, 14:39:11 uwagi 3
--- dotąd

Skrypt ma mi wyodrębnić z tego tylko godziny i mnuty wraz z ew. uwagami, 
  czyli zxeby na wyjściu dostać:

14:35
14:35 uwagi 1
14:35


14:35 uwagi 2
14:35


14:39
14:39 uwagi 3

Napisałem skrypt który mi nie dziala:

#!/usr/bin/perl
use strict ;
while (<STDIN>){

	my $line = $_ ;
	$line =~ /^(.{5,6})(\d+)(.+)(.\d{4,4})(\,\s)(.{5,5})(.{4,4})(.*)$/ ;

	if ($8){
		print $6." (".$8.")\n" ;
	}else{
		print $6 ;
	} ;

} ;

Wynik jego dzialania wskazuje na to, że mimo wykonania w kolenym loopie 
pętli operacji =~ nie są w żaden sposób resetowane $1, $2, $3, $4 itd

Wynik jest taki:

$ cat /home/phz/test/sprzyklad.txt | ./test.pl
14:35 (uwagi 1)
14:35 (uwagi 1)
14:35 (uwagi 1)
14:35 (uwagi 1)
14:35 (uwagi 2)
14:35 (uwagi 2)
14:35 (uwagi 2)
14:35 (uwagi 2)
14:35 (uwagi 2)
14:39 (uwagi 3)

Będę bardzo wdzięczny za pomoc, sprawa jest prywatna, ale dość pilna dla 
mnie.

-- 
Z cyklu "Uroki demokracji", czyli pytania i odpowiedzi w teledurniejach:
- Ile kół ma trójkołowiec?
- Dwa.
NP: Black Stone Cherry - Please Come In
Re: Problem z regexpem
#51666
Author: Maciej Zielenkieiwcz
Date: Fri, 06 Nov 2009 16:58
25 lines
1493 bytes
On 2009-11-06 16:30, Piotr Hosowicz <adresat.nieprawidlowski@op.pl> wrote:
> Napisałem skrypt który mi nie dziala:
>
> [...]
>
> Wynik jego dzialania wskazuje na to, że mimo wykonania w kolenym loopie 
> pętli operacji =~ nie są w żaden sposób resetowane $1, $2, $3, $4 itd

Tamto wyrażenie regularne było za skomplikowane i nie chciało mi się
szukać w nim błędu, ale coś takiego działa:

#!/usr/bin/perl
use strict ;
while (<STDIN>){
	if (/^.*,.*, (\d\d:\d\d):\d\d\s*(.*)$/)
	{
        	if ($2){
        	        print $1." ".$2."\n" ;
        	} else {
        	        print $1."\n" ;
        	}
	} else {
		print "\n";
	}
}
Re: Problem z regexpem
#51636
Author: Piotr Hosowicz
Date: Fri, 06 Nov 2009 17:15
43 lines
2301 bytes
Maciej Zielenkieiwcz wrote:
> On 2009-11-06 16:30, Piotr Hosowicz <adresat.nieprawidlowski@op.pl> wrote:
>> Napisałem skrypt który mi nie dziala:
>>
>> [...]
>>
>> Wynik jego dzialania wskazuje na to, że mimo wykonania w kolenym loopie 
>> pętli operacji =~ nie są w żaden sposób resetowane $1, $2, $3, $4 itd
> 
> Tamto wyrażenie regularne było za skomplikowane i nie chciało mi się
> szukać w nim błędu,

No bo faktycznie namotałem niemiłosiernie. ;-)

> ale coś takiego działa:
> 
> #!/usr/bin/perl
> use strict ;
> while (<STDIN>){
> 	if (/^.*,.*, (\d\d:\d\d):\d\d\s*(.*)$/)
> 	{
>         	if ($2){
>         	        print $1." ".$2."\n" ;
>         	} else {
>         	        print $1."\n" ;
>         	}
> 	} else {
> 		print "\n";
> 	}
> }
> 

Zgadza się, działa jak złoto. Bardzo dziękuję. Jeszcze muszę zrobić 
drobne przeróbki i będzie to o co mi chodzi.


-- 
Miss World 2006: Jestem szczęśliwa, że mogę wspaniale uczestniczyć w
przeżyciu najpiękniejszych kobiet tutaj w Warszawie, gdzie Jan Paweł II,
papież, w Polsce, skąd pochodzi. Spotkałam się z Kościołem Mariackim
w Krakowie, który ciepło ludzi i wielka przyjaźń. Połowa mojego serca
zostanie w Polsce, a druga połowa pojedzie ze mną do mojego kraju.
NP: Alice In Chains - All Secrets Known
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads