|
| 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 |
|
| |
|
|