/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Ekstraktion
Fra : Dieter Britz


Dato : 13-06-08 15:00

Jeg har en streng, der består af flere linjer, der specificerer en
citation. Fx kan der stå

Navn H;
Tidsskrift 17 (2000) 44--46
"Titel"

og mere. Der er ca. 1400 af disse "items", og jeg er i gang med at
konvertere dem til BibTeX form vha Perl. Alt virker fint, bortset
fra et enkelt problem: Det hænder, at der er en ekstra linje med, fx

{In Japanese}

i, og denne linje kan enten være lige efter angivelsen af tidsskriftet,
eller i nogle tilfælde også efter titlen.

Kan jeg ekstrahere denne linje, og samtidigt fjerne den fra en sådan
gruppe ("item") ? Hvordan?

Jeg har det sådan nu, at hver item kommer som en streng i et større
array, lad os kalde hver af dem $item, som jeg så piller fra hinanden.
Hvis jeg kunne fjerne den ovennævnte linje, ville alt gå fint derefter,
men linjen skal naturligvis bevares under et andet navn, fx $note.
--
Dieter Britz (britz<at>chem.au.dk)

 
 
Michael Zedeler (13-06-2008)
Kommentar
Fra : Michael Zedeler


Dato : 13-06-08 23:08

Dieter Britz wrote:
> Jeg har en streng, der består af flere linjer, der specificerer en
> citation. Fx kan der stå
>
> Navn H;
> Tidsskrift 17 (2000) 44--46
> "Titel"
>
> og mere. Der er ca. 1400 af disse "items", og jeg er i gang med at
> konvertere dem til BibTeX form vha Perl. Alt virker fint, bortset
> fra et enkelt problem: Det hænder, at der er en ekstra linje med, fx
>
> {In Japanese}
>
> i, og denne linje kan enten være lige efter angivelsen af tidsskriftet,
> eller i nogle tilfælde også efter titlen.
>
> Kan jeg ekstrahere denne linje, og samtidigt fjerne den fra en sådan
> gruppe ("item") ? Hvordan?

Hvis formen er {In <x>} hvor <x> er et ord, kan du altid fjerne det fra
en vilkårlig streng og samtidig gemme det med følgende:

$streng = <<'END_CITATION';
Navn H;
Tidsskrift 17 (2000) 44--46
{In Japanese}
"Titel"
END_CITATION
$streng =~ s/({In \w+})\s*//s;
print "Nu ser det sådan ud:\n${streng}Og jeg fandt dette her: $1\n";

Det giver dette output:
Nu ser det sådan ud:
Navn H;
Tidsskrift 17 (2000) 44--46
"Titel"
Og jeg fandt dette her: {In Japanese}

Husk lige at tuborg-klammer kan blive fortolket hvis de står bestemte
steder i regexes. Hvis du bygger videre på ovenstående, så kan det blive
nødvendigt at escape dem.

Mvh. Michael.

Dieter Britz (17-06-2008)
Kommentar
Fra : Dieter Britz


Dato : 17-06-08 15:32

Michael Zedeler wrote:

> Dieter Britz wrote:
>> Jeg har en streng, der består af flere linjer, der specificerer en
>> citation. Fx kan der stå
>>
>> Navn H;
>> Tidsskrift 17 (2000) 44--46
>> "Titel"
>>
>> og mere. Der er ca. 1400 af disse "items", og jeg er i gang med at
>> konvertere dem til BibTeX form vha Perl. Alt virker fint, bortset
>> fra et enkelt problem: Det hænder, at der er en ekstra linje med, fx
>>
>> {In Japanese}
>>
>> i, og denne linje kan enten være lige efter angivelsen af tidsskriftet,
>> eller i nogle tilfælde også efter titlen.
>>
>> Kan jeg ekstrahere denne linje, og samtidigt fjerne den fra en sådan
>> gruppe ("item") ? Hvordan?
>
> Hvis formen er {In <x>} hvor <x> er et ord, kan du altid fjerne det fra
> en vilkårlig streng og samtidig gemme det med følgende:
>
> $streng = <<'END_CITATION';
> Navn H;
> Tidsskrift 17 (2000) 44--46
> {In Japanese}
> "Titel"
> END_CITATION
> $streng =~ s/({In \w+})\s*//s;
> print "Nu ser det sådan ud:\n${streng}Og jeg fandt dette her: $1\n";
>
> Det giver dette output:
> Nu ser det sådan ud:
> Navn H;
> Tidsskrift 17 (2000) 44--46
> "Titel"
> Og jeg fandt dette her: {In Japanese}
>
> Husk lige at tuborg-klammer kan blive fortolket hvis de står bestemte
> steder i regexes. Hvis du bygger videre på ovenstående, så kan det blive
> nødvendigt at escape dem.
>
> Mvh. Michael.

Tak! Der er blot et lille problem tilbage. Hvis der ikke er en
linje med {In...}, så bliver $1 lige med indeholdet af første
linje i $streng. Men i så fald vil jeg gerne have at $note bliver
undefined, så at jeg senere kan lade være med at printe den ud.
Hvordan gør jeg?
--
Dieter Britz (britz<at>chem.au.dk)

Dieter Britz (17-06-2008)
Kommentar
Fra : Dieter Britz


Dato : 17-06-08 15:41

Dieter Britz wrote:

> Michael Zedeler wrote:
>
>> Dieter Britz wrote:
>>> Jeg har en streng, der består af flere linjer, der specificerer en
>>> citation. Fx kan der stå
>>>
>>> Navn H;
>>> Tidsskrift 17 (2000) 44--46
>>> "Titel"
>>>
>>> og mere. Der er ca. 1400 af disse "items", og jeg er i gang med at
>>> konvertere dem til BibTeX form vha Perl. Alt virker fint, bortset
>>> fra et enkelt problem: Det hænder, at der er en ekstra linje med, fx
>>>
>>> {In Japanese}
>>>
>>> i, og denne linje kan enten være lige efter angivelsen af tidsskriftet,
>>> eller i nogle tilfælde også efter titlen.
>>>
>>> Kan jeg ekstrahere denne linje, og samtidigt fjerne den fra en sådan
>>> gruppe ("item") ? Hvordan?
>>
>> Hvis formen er {In <x>} hvor <x> er et ord, kan du altid fjerne det fra
>> en vilkårlig streng og samtidig gemme det med følgende:
>>
>> $streng = <<'END_CITATION';
>> Navn H;
>> Tidsskrift 17 (2000) 44--46
>> {In Japanese}
>> "Titel"
>> END_CITATION
>> $streng =~ s/({In \w+})\s*//s;
>> print "Nu ser det sådan ud:\n${streng}Og jeg fandt dette her: $1\n";
>>
>> Det giver dette output:
>> Nu ser det sådan ud:
>> Navn H;
>> Tidsskrift 17 (2000) 44--46
>> "Titel"
>> Og jeg fandt dette her: {In Japanese}
>>
>> Husk lige at tuborg-klammer kan blive fortolket hvis de står bestemte
>> steder i regexes. Hvis du bygger videre på ovenstående, så kan det blive
>> nødvendigt at escape dem.
>>
>> Mvh. Michael.
>
> Tak! Der er blot et lille problem tilbage. Hvis der ikke er en
> linje med {In...}, så bliver $1 lige med indeholdet af første
> linje i $streng. Men i så fald vil jeg gerne have at $note bliver
> undefined, så at jeg senere kan lade være med at printe den ud.
> Hvordan gør jeg?

Undskyld, jeg har lige fundet ud af det. Tak for din hjelp.

--
Dieter Britz (britz<at>chem.au.dk)

Michael Zedeler (17-06-2008)
Kommentar
Fra : Michael Zedeler


Dato : 17-06-08 18:45

Dieter Britz wrote:
> Michael Zedeler wrote:
>
>> Dieter Britz wrote:
>>> Jeg har en streng, der består af flere linjer, der specificerer en
>>> citation. Fx kan der stå
>>>
>>> Navn H;
>>> Tidsskrift 17 (2000) 44--46
>>> "Titel"
>>>
>>> og mere. Der er ca. 1400 af disse "items", og jeg er i gang med at
>>> konvertere dem til BibTeX form vha Perl. Alt virker fint, bortset
>>> fra et enkelt problem: Det hænder, at der er en ekstra linje med, fx
>>>
>>> {In Japanese}
>>>
>>> i, og denne linje kan enten være lige efter angivelsen af tidsskriftet,
>>> eller i nogle tilfælde også efter titlen.
>>>
>>> Kan jeg ekstrahere denne linje, og samtidigt fjerne den fra en sådan
>>> gruppe ("item") ? Hvordan?
>> Hvis formen er {In <x>} hvor <x> er et ord, kan du altid fjerne det fra
>> en vilkårlig streng og samtidig gemme det med følgende:
>>
>> $streng = <<'END_CITATION';
>> Navn H;
>> Tidsskrift 17 (2000) 44--46
>> {In Japanese}
>> "Titel"
>> END_CITATION
>> $streng =~ s/({In \w+})\s*//s;
>> print "Nu ser det sådan ud:\n${streng}Og jeg fandt dette her: $1\n";
>>
>> Det giver dette output:
>> Nu ser det sådan ud:
>> Navn H;
>> Tidsskrift 17 (2000) 44--46
>> "Titel"
>> Og jeg fandt dette her: {In Japanese}
>>
>> Husk lige at tuborg-klammer kan blive fortolket hvis de står bestemte
>> steder i regexes. Hvis du bygger videre på ovenstående, så kan det blive
>> nødvendigt at escape dem.
>
> Tak! Der er blot et lille problem tilbage. Hvis der ikke er en
> linje med {In...}, så bliver $1 lige med indeholdet af første
> linje i $streng.

Det lyder meget mærkeligt. Kan du ikke bringe (en del af) koden her?

Mvh. Michael.

Dieter Britz (18-06-2008)
Kommentar
Fra : Dieter Britz


Dato : 18-06-08 08:52

Michael Zedeler wrote:

> Dieter Britz wrote:
>> Michael Zedeler wrote:
>>
>>> Dieter Britz wrote:
>>>> Jeg har en streng, der består af flere linjer, der specificerer en
>>>> citation. Fx kan der stå
>>>>
>>>> Navn H;
>>>> Tidsskrift 17 (2000) 44--46
>>>> "Titel"
>>>>
>>>> og mere. Der er ca. 1400 af disse "items", og jeg er i gang med at
>>>> konvertere dem til BibTeX form vha Perl. Alt virker fint, bortset
>>>> fra et enkelt problem: Det hænder, at der er en ekstra linje med, fx
>>>>
>>>> {In Japanese}
>>>>
>>>> i, og denne linje kan enten være lige efter angivelsen af tidsskriftet,
>>>> eller i nogle tilfælde også efter titlen.
>>>>
>>>> Kan jeg ekstrahere denne linje, og samtidigt fjerne den fra en sådan
>>>> gruppe ("item") ? Hvordan?
>>> Hvis formen er {In <x>} hvor <x> er et ord, kan du altid fjerne det fra
>>> en vilkårlig streng og samtidig gemme det med følgende:
>>>
>>> $streng = <<'END_CITATION';
>>> Navn H;
>>> Tidsskrift 17 (2000) 44--46
>>> {In Japanese}
>>> "Titel"
>>> END_CITATION
>>> $streng =~ s/({In \w+})\s*//s;
>>> print "Nu ser det sådan ud:\n${streng}Og jeg fandt dette her: $1\n";
>>>
>>> Det giver dette output:
>>> Nu ser det sådan ud:
>>> Navn H;
>>> Tidsskrift 17 (2000) 44--46
>>> "Titel"
>>> Og jeg fandt dette her: {In Japanese}
>>>
>>> Husk lige at tuborg-klammer kan blive fortolket hvis de står bestemte
>>> steder i regexes. Hvis du bygger videre på ovenstående, så kan det blive
>>> nødvendigt at escape dem.
>>
>> Tak! Der er blot et lille problem tilbage. Hvis der ikke er en
>> linje med {In...}, så bliver $1 lige med indeholdet af første
>> linje i $streng.
>
> Det lyder meget mærkeligt. Kan du ikke bringe (en del af) koden her?
>
> Mvh. Michael.

Jeg havde dummet mig ved at sætte en sætning som

$note = $1;

længere ned i koden. Jeg havde glemt at $1 indeholder det der er
sket sidst. Da jeg flyttede det op lige under din regex, var det OK.
--
Dieter Britz (britz<at>chem.au.dk)

Søg
Reklame
Statistik
Spørgsmål : 177416
Tips : 31962
Nyheder : 719565
Indlæg : 6407859
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste