Portál AbcLinuxu, 12. května 2024 20:15


Dotaz: perl od-do vcetne

31.10.2008 14:22 Terka | skóre: 13
perl od-do vcetne
Přečteno: 296×
Odpovědět | Admin
perl umi 
/od/../do/
napr. ze souboru:
1
2od
3
4
5do
6do 
7do  
8

vytiskne:
2od
3
4
5do

lze nejak nastavit aby tisknul vcetne (napr ve VIMu to jde pomoci +-: /od/+,/do/-)
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.11.2008 12:48 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: perl od-do vcetne
Odpovědět | | Sbalit | Link | Blokovat | Admin
len programovo (netestovane):
my $state = 0;
while (<>) {
  next unless $state ||= m/od/;
  print;
  last if m/do;
}
popr sa mozes pohrat s grep (tiez netestovane):
my $state = 0;
my @list = grep { $state ||= m/od/; $state &&= ! m/do; $state } <>
4.11.2008 12:30 Roman Vasicek
Rozbalit Rozbalit vše Re: perl od-do vcetne
V prvnim priklade chybi jen '/' pred poslednim strednikem pro dosazeni kyzene funkcnosti. Funkcni verze
my $state = 0;
while (<>) {
  next unless $state ||= m/od/;
  print;
  last if m/do/;
}
Druhy priklad potrebuje krapet upravit aby zahrnul i "do" radek. Pro prehlednost jsem jej rozepsal na vice radek
my $state = 0;
print grep {
    $state ||= m/od/;
    if ($state) {
      $state &&= ! m/do/;
      1;
    } else {
      $state;
    }
  } <>;
Oboji testovano v perl v5.10.0 pod cygwinem.
4.11.2008 13:37 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: perl od-do vcetne
ok dík za otestovanie a opravu :-)
btw, else vetva je zbytočná, návratová hodnota funkcie je hodnota posledného vykonaného výrazu, v tomto prípade $state
13.11.2008 10:19 Terka | skóre: 13
Rozbalit Rozbalit vše Re: perl od-do vcetne
resila jsem to takhle, je to delsi, ale pro me srozumitelne.
bohuzel to nejde jako one-liner :(
$tisk=0;

open(INPUT,  $in) ;


######### tisk vybranych # 
while ($radek =INPUT) { #tady ma byt INPUT v spic. zavorkach
  #OD  kdyz je zacatek, je $tisk=1
  if ($radek =~/od/) {
     $tisk=1;
  }

  #DO kdyz je konec, vytiskni ho, a $tisk=0
  if ($radek =~/do/) {
     print $radek;
     $tisk=0;
  }

  #vlastni tisk pro $tisk=1
  if ($tisk==1) {
     print $radek;
  }
}
10.11.2008 12:13 Terka | skóre: 13
Rozbalit Rozbalit vše Re: perl od-do vcetne
diky obema!

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.