|  | 		    
					
        
         
          
         
	
          | |  | Inspiration til søgning i en tekst line Fra : Jan Birk
 | 
 Dato :  06-02-06 16:18
 | 
 |  | 
 
            Jeg har en line af tekstfelter adskilt af et kolon.
 Jeg kender ikke positionerne eller antallet af felter. Jeg har brug for 
 at finde en given værdi, f.eks. ABEKAT i et felt og returnere det næst 
 kommende felt (indeholde værdien, f.eks. Gorilla   .
 Nogle gode forslag?
 Pft
 /Jan
            
             |  |  | 
  Peter Makholm (06-02-2006) 
 
	
          | |  | Kommentar Fra : Peter Makholm
 | 
 Dato :  06-02-06 16:37
 | 
 |  | 
 
            Jan Birk <jan.birk@invalid.domain.null> writes:
 > Jeg kender ikke positionerne eller antallet af felter. Jeg har brug
 > for at finde en given værdi, f.eks. ABEKAT i et felt og returnere det
 > næst kommende felt (indeholde værdien, f.eks. Gorilla   .
 >
 > Nogle gode forslag?
 Perl - hvad ellers?
 Split linjen på kolon. Løb indekserne igennem og hvis $F[$i] matcher
 din værdi, så skriver du $F[$i+1] ud.
 -- 
  Peter Makholm     |       Why does the entertainment industry wants us to
  peter@makholm.net |      believe that a society base on full surveillance
 http://hacking.dk  |                                               is bad?
                    |                       Do they have something to hide?
            
             |  |  | 
  Jan Birk (06-02-2006) 
 
	
          | |  | Kommentar Fra : Jan Birk
 | 
 Dato :  06-02-06 16:58
 | 
 |  | 
 
            > Perl - hvad ellers?
   Tjaa, hvis ikke kan slippe for at lære perl, så må jeg jo igang. Det 
 virker bare lidt voldsomt for en onetimer   )
 > Split linjen på kolon. Løb indekserne igennem og hvis $F[$i] matcher
 > din værdi, så skriver du $F[$i+1] ud.
 Tak!
 /Jan
            
             |  |  | 
  Jan Birk (06-02-2006) 
 
	
          | |  | Kommentar Fra : Jan Birk
 | 
 Dato :  06-02-06 17:25
 | 
 |  | 
 
            > Split linjen på kolon. Løb indekserne igennem og hvis $F[$i] matcher
 > din værdi, så skriver du $F[$i+1] ud.
 Tak, det var jo ikke slemt! Det kunne være at tiden er inde til at bruge 
 et par dage på perl    for ($i = 0 ; $i < @elementer ; $i++) {
    if (@elementer[$i] eq "DTEND") {
      printf("%s = %s\n",@elementer[$i],@elementer[$i + 1]);
    }
 }
 /Jan
            
             |  |  | 
  Peter Makholm (06-02-2006) 
 
	
          | |  | Kommentar Fra : Peter Makholm
 | 
 Dato :  06-02-06 19:20
 | 
 |  | 
 
            Jan Birk <jan.birk@invalid.domain.null> writes:
 >> Split linjen på kolon. Løb indekserne igennem og hvis $F[$i] matcher
 >> din værdi, så skriver du $F[$i+1] ud.
 >
 > Tak, det var jo ikke slemt! Det kunne være at tiden er inde til at
 > bruge et par dage på perl    >
 > for ($i = 0 ; $i < @elementer ; $i++) {
 >   if (@elementer[$i] eq "DTEND") {
 >     printf("%s = %s\n",@elementer[$i],@elementer[$i + 1]);
 >   }
 > }
 Ikke dårligt. Men hvis du sætter dig til at lære perl, så vil jeg lige
 kommentere din kode. Når du i perl skal have fat i et enkelt element
 af en eller anden type, så skal du næsten altid bruge $ og ikke @. Det
 vil sige at i if-sætningen og i printf-sætningen skal du bruge
 $elementer[$i].
 Desuden er det meget sjældent man bruger printf i perl. Oftest bruger
 man interpolation af variable, det vil sige at de automatis bliver sat
 ind i strenge hvis der er "" rundt om istedet for ''.
 Jeg ville skrive ovenstående som:
 for ($i = 0 ; $i < @elements; $i++) {
     if ($elements[$i] eq 'DTEND') {
         print "$elements[$i] = $elements[$i+1]\n";
     }
 }
 -- 
  Peter Makholm     |   First you fall in love with Antarctica, and then it
  peter@makholm.net |                                     breaks your heart
 http://hacking.dk  |                                         -- Antarctica
            
             |  |  | 
   Jan Birk (06-02-2006) 
 
	
          | |  | Kommentar Fra : Jan Birk
 | 
 Dato :  06-02-06 19:38
 | 
 |  | 
 
            > Jeg ville skrive ovenstående som:
 > 
 > for ($i = 0 ; $i < @elements; $i++) {
 >     if ($elements[$i] eq 'DTEND') {
 >         print "$elements[$i] = $elements[$i+1]\n";
 >     }
 > }
 Mange tak. Jeg kan godt se pointen (resultatet er dog kun et '='    Men, hvis man ikke bruger printf (jeg lærte printf i skolen og har hængt 
 på den), hvordan formatterer man så i perl?
 /Jan
            
             |  |  | 
  Adam Sjøgren (06-02-2006) 
 
	
          | |  | Kommentar Fra : Adam Sjøgren
 | 
 Dato :  06-02-06 19:27
 | 
 |  | 
 
            On Mon, 06 Feb 2006 17:25:26 +0100, Jan wrote:
 >   if (@elementer[$i] eq "DTEND") {
 Bør være $elementer[$i].
 Brokker din perl sig ikke over det?
 (Husk altid use strict; use warnings; når du skriver Perl    Og:
 >  if (@elementer[$i] eq "DTEND") {
 >     printf("%s = %s\n",@elementer[$i],@elementer[$i + 1]);
 samme her og her.
 Du kan i øvrigt skrive den sidste linie lidt mindre C-agtigt, hvis du
 har lyst:
       print $elementer[$i] . ' = ' . $elementer[$i+1] . "\n";
 Videre sniksnakkeri i dk.edb.programmering.perl (followup-to)      Mvh.
 -- 
  "Lad bare kulturministeren kalde H. C. Andersen et           Adam Sjøgren
   'fantastisk brand' - det siger alt om niveauet i dansk      asjo@diku.dk
   kulturpolitik."
            
             |  |  | 
  Adam Sjøgren (06-02-2006) 
 
	
          | |  | Kommentar Fra : Adam Sjøgren
 | 
 Dato :  06-02-06 19:27
 | 
 |  | 
 
            On Mon, 06 Feb 2006 19:20:00 +0100, Peter wrote:
 > Jeg ville skrive ovenstående som:
 > for ($i = 0 ; $i < @elements; $i++) {
      my $i
 ?
    ,
 -- 
  "we push onward. to you, it is 2005, to us, it is            Adam Sjøgren
   2011. we are always far ahead."                        asjo@koldfront.dk
            
             |  |  | 
   Jan Birk (06-02-2006) 
 
	
          | |  | Kommentar Fra : Jan Birk
 | 
 Dato :  06-02-06 19:39
 | 
 |  | 
 
            >> Jeg ville skrive ovenstående som:
 > 
 >> for ($i = 0 ; $i < @elements; $i++) {
 >      my $i
 Der er mange muligheder for at udtrykke det samme. Det er lidt 
 forvirrende   ))
 /Jan
            
             |  |  | 
    Jesper Krogh (06-02-2006) 
 
	
          | |  | Kommentar Fra : Jesper Krogh
 | 
 Dato :  06-02-06 19:47
 | 
 |  | 
 
            I dk.edb.system.unix, skrev Jan Birk:
 > >> Jeg ville skrive ovenstående som:
 > > 
 > >> for ($i = 0 ; $i < @elements; $i++) {
 > >      my $i
 > 
 >  Der er mange muligheder for at udtrykke det samme. Det er lidt 
 >  forvirrende   ))
 Som Adam skriver:
 #!/usr/bin/perl
 use strict;
 use warnings;
 Her begynder din perl-kode. 
 Jesper
 -- 
 ../Jesper Krogh, jesper@krogh.cc, Jabber ID: jesper@jabbernet.dk
            
             |  |  | 
  Peter Makholm (06-02-2006) 
 
	
          | |  | Kommentar Fra : Peter Makholm
 | 
 Dato :  06-02-06 19:53
 | 
 |  | 
 
            asjo@koldfront.dk (Adam Sjøgren) writes:
 >> for ($i = 0 ; $i < @elements; $i++) {
 >      my $i
 >
 > ?
 Aldrig i livet. Eller jo, hvis jeg brugte 'use strict' ville jeg nok
 foretrække 'my $i' frem for at bruge $a eller $b til den slags løkker.
 -- 
  Peter Makholm     |         Perhaps that late-night surfing is not such a
  peter@makholm.net |           waste of time after all: it is just the web
 http://hacking.dk  |                                              dreaming
                    |                                    -- Tim Berners-Lee
            
             |  |  | 
  Adam Sjøgren (06-02-2006) 
 
	
          | |  | Kommentar Fra : Adam Sjøgren
 | 
 Dato :  06-02-06 20:26
 | 
 |  | On Mon, 06 Feb 2006 19:53:27 +0100, Peter wrote:
 
 > Aldrig i livet. Eller jo, hvis jeg brugte 'use strict' ville jeg nok
 > foretrække 'my $i' frem for at bruge $a eller $b til den slags løkker.
 
 ;-D
 
 
 Mvh.
 
 Adam (der er blevet bidt af $a og $b mere end én gang)
 
 --
 "Äter ni middag?"                                            Adam Sjøgren
 asjo@koldfront.dk
 
 
 |  |  | 
   Jan Birk (06-02-2006) 
 
	
          | |  | Kommentar Fra : Jan Birk
 | 
 Dato :  06-02-06 20:32
 | 
 |  | 
 
            >> Aldrig i livet. Eller jo, hvis jeg brugte 'use strict' ville jeg nok
 >> foretrække 'my $i' frem for at bruge $a eller $b til den slags løkker.
 > 
 > ;-D
 Måske en novice kan blive indført i forskellen - uden at læse 800 
 sider??    /Jan
            
             |  |  | 
  Adam Sjøgren (06-02-2006) 
 
	
          | |  | Kommentar Fra : Adam Sjøgren
 | 
 Dato :  06-02-06 20:31
 | 
 |  | 
 
            On Mon, 06 Feb 2006 19:39:12 +0100, Jan wrote:
 > Der er mange muligheder for at udtrykke det samme. Det er lidt
 > forvirrende   ))
 Ja. Det er også en af forcerne.
    ,
 -- 
  "we push onward. to you, it is 2005, to us, it is            Adam Sjøgren
   2011. we are always far ahead."                        asjo@koldfront.dk
            
             |  |  | 
  Adam Sjøgren (06-02-2006) 
 
	
          | |  | Kommentar Fra : Adam Sjøgren
 | 
 Dato :  06-02-06 20:31
 | 
 |  | 
 
            On Mon, 06 Feb 2006 19:37:43 +0100, Jan wrote:
 > Men, hvis man ikke bruger printf (jeg lærte printf i skolen og har
 > hængt på den), hvordan formatterer man så i perl?
 Man bruger sjældent printf i Perl når man bare vi sætte strenge
 sammen. Da bruger man oftest enten interpolation:
  print "Hello $name";
 eller concatenation (hvad er det tilsvarende danske udtryk?):
  print 'Hello ' . $name;
 Man sparer at tælle    printf/sprintf bruges typisk kun når man gerne vil have tal til at stå
 pænt under hinanden og i den dur.
 I rigtigt gamle dage var formats obligatorisk pensum når man lærte
 Perl. Det bruges vist sjældent i dag?
 Videre i dk.edb.programmering.perl.
   Mvh.
 -- 
  "we push onward. to you, it is 2005, to us, it is            Adam Sjøgren
   2011. we are always far ahead."                        asjo@koldfront.dk
            
             |  |  | 
  Peter Makholm (06-02-2006) 
 
	
          | |  | Kommentar Fra : Peter Makholm
 | 
 Dato :  06-02-06 21:09
 | 
 |  | 
 
            Jan Birk <jan.birk@invalid.domain.null> writes:
 >>> Aldrig i livet. Eller jo, hvis jeg brugte 'use strict' ville jeg nok
 >>> foretrække 'my $i' frem for at bruge $a eller $b til den slags løkker.
 >> ;-D
 >
 >
 > Måske en novice kan blive indført i forskellen - uden at læse 800
 > sider??    Når man skriver 'use strict' i sit perlprogram skal man erklære alle
 varialbe, undtagen $a og $b. De håndteres specielt fordi de bruges når
 man sorterer:
   @sorted = sort { $a <=> $b } @numbers
 -- 
  Peter Makholm     |                                              What if:
  peter@makholm.net |     IBM bought Xenix from Microsoft instead of buying
 http://hacking.dk  |                                                  DOS?
            
             |  |  | 
  Ukendt (06-02-2006) 
 
	
          | |  | Kommentar Fra : Ukendt
 | 
 Dato :  06-02-06 18:37
 | 
 |  | 
 
            Jan Birk wrote:
 > 
 > Jeg har en line af tekstfelter adskilt af et kolon.
 > 
 > Jeg kender ikke positionerne eller antallet af felter. Jeg har brug for
 > at finde en given værdi, f.eks. ABEKAT i et felt og returnere det næst
 > kommende felt (indeholde værdien, f.eks. Gorilla   .
 > 
 > Nogle gode forslag?
 grep ABEKAT|sed -e 's/.*:ABEKAT:\([^:]*\):.*/\1/'
 Eller måske
 sed -e 's/.*:ABEKAT:\([^:]*\):.*/\1/;t;s/.*//'
 -- 
 Kasper Dupont -- Rigtige mænd skriver deres egne backupprogrammer
 #define _(_)"d.%.4s%."_"2s" /* This is my new email address */
 char*_="@2kaspner"_()"%03"_("4s%.")"t\n";printf(_+11,_+6,_,6,_+2,_+7,_+6);
            
             |  |  | 
  Jan Birk (06-02-2006) 
 
	
          | |  | Kommentar Fra : Jan Birk
 | 
 Dato :  06-02-06 19:02
 | 
 |  | >> Nogle gode forslag?
 >
 > grep ABEKAT|sed -e 's/.*:ABEKAT:\([^:]*\):.*/\1/'
 >
 > Eller måske
 >
 > sed -e 's/.*:ABEKAT:\([^:]*\):.*/\1/;t;s/.*//'
 
 Ikke ringe, ikke ringe....
 
 Tak
 
 /Jan
 
 
 
 |  |  | 
  Jan Birk (06-02-2006) 
 
	
          | |  | Kommentar Fra : Jan Birk
 | 
 Dato :  06-02-06 19:06
 | 
 |  | 
 
            > sed -e 's/.*:ABEKAT:\([^:]*\):.*/\1/;t;s/.*//'
 Du kan måske også ....    Et af felterne indeholder et semikolon ";". I 
 din fine løsning kommer teksten efter semikolon ikke med.    Pft
 /Jan
            
             |  |  | 
   Jan Birk (06-02-2006) 
 
	
          | |  | Kommentar Fra : Jan Birk
 | 
 Dato :  06-02-06 19:09
 | 
 |  | 
 
            > Du kan måske også ....    Et af felterne indeholder et semikolon ";". I 
 > din fine løsning kommer teksten efter semikolon ikke med.    Glem det, din løsning virker fint, det er mig der ikke kan læse...
 /Jan
            
             |  |  | 
  N/A (06-02-2006) 
 
	
          | |  | Kommentar Fra : N/A
 | 
 Dato :  06-02-06 19:38
 | 
 |  | 
 
 
 |  |  | 
  N/A (06-02-2006) 
 
	
          | |  | Kommentar Fra : N/A
 | 
 Dato :  06-02-06 20:32
 | 
 |  | 
 
 
 |  |  | 
 |  |