Avatar billede shadowsurfer Nybegynder
21. januar 2004 - 17:29 Der er 8 kommentarer

For ikke resten af linien med

Jeg har det her perl script, som skal oversætte en tekst, med nogle simple opmærkning, til et xml format.
Når scriptet når til £### skal tællerne $linieNumberBrand sættes til ###. Dette gør scriptet også, men det "æder" resten af linien. Det skal det ikke.

------------Perl script-----------------------
#!/usr/bin/perl -w

if (int(@ARGV) == 2)
{
    $input = $ARGV[0];
#  $tka = $ARGV[1];
#  $sentil = $ARGV[2];
    $output = $ARGV[1];
    $lineNumberNormal = 1;
    $lineNumberBrand = 1;
    open (IN, $input) || die "Can't open $input: $!";
#  open (TKA, $tka) || die "Can't open $tka: $!";
#  open (ST, $sentil) || die "Can't open $sentil: $!";
    open (OUT, ">$output") || die "Can't create $output: $!";
#  open (DTD, "smn.dtd") || die "Can't open smn.dtd: $!";
#  while (<DTD>)
#  {
#      print OUT;
#  }
#  close (DTD);
    print OUT "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
    print OUT "\n<TEI.2>";
    while (<IN>)
    {
        if (/^\s*$/g)
        {
            ## Fjernelse af tomme linier
            s/^\s*$//g;
        }# if (/^\s*$/g)

        #leder efter £ og
        elsif(/^\£([0-9]*)/g)
        {
            $lineNumberBrand = $1 -1;
        }

        else
        {
            ## Udskiftning af < og > med hhv. <uforkortet> og </uforkortet>
            s/\</\<forkortelse1/g;
            s/\>/\<\/forkortelse\>/g;
            s/forkortelse1/forkortelse\>/g;
            ## Udskiftning af [##] (side tæller) med </side> og <side id="##">
            s/\((.*)\)(.*)/\<\/side\>\n\n\<side id\=\"$1\"\>\n\<l id=\"$lineNumberNormal\" id2=\"$lineNumberBrand\"\>$2\<\/l\>/;
            ## Fjernelse af den første </side> da der jo her er tale om start på dok.
            s/\<\/side\>\n\<side id\=\"1r\"\>/\<side id\=\"1r\"\>/;
            ## Udskiftning af * og ¤ med hhv. <initial> og </initial>
            s/\#/\<initial>/g;
            s/\¤/\<\/initial>/g;
unless (/\<side/ || /\<\/side/)
            {
                chomp($_);
                $_ = "\<l id=\"$lineNumberNormal\" id2=\"$lineNumberBrand\"\>" . $_ . "\</l\>\n";
            }
            print OUT;
        }# else

        $lineNumberNormal++;
        $lineNumberBrand++;
    }# while (<IN>)
    close (IN);
    print OUT "\n</TEI.2>";
    close (OUT);
}
else
{
    print "This script requires exactly 4 parameters. Input file, tka file, later addtion fil and output file.\n";
5 fewer lines

------------ eks txt ----------
153v)#Ie¤th * lidh<et> spel acth<e>r jech ath skriwe
th<e>r man maa tidh<e>n m<edh> for driwe
om nog<e>r vndh<e>r i fordom skieddæ
£100 i hwilken man th<et> lyst<e>r ath wedhe
for wor h<er>ræ hans fødzels aar

------------ eks output -----------
EI.2></side>

<side id="153v">
<l id="1" id2="1"><initial>Ie</initial>th * lidh<forkortelse>et</forkortelse> spel acth<forkortelse>e</forkortelse>r jech ath skriwe</l>
<l id="2" id2="2">th<forkortelse>e</forkortelse>r man maa tidh<forkortelse>e</forkortelse>n m<forkortelse>edh</forkortelse> for driwe</l>
<l id="3" id2="3">om nog<forkortelse>e</forkortelse>r vndh<forkortelse>e</forkortelse>r i fordom skieddæ</l>
<l id="5" id2="100">for wor h<forkortelse>er</forkortelse>ræ hans fødzels aar</l>

----- ønsket eks output ------------
?xml version="1.0" encoding="ISO-8859-1"?>
<TEI.2></side>

<side id="153v">
<l id="1" id2="1"><initial>Ie</initial>th * lidh<forkortelse>et</forkortelse> spel acth<forkortelse>e</forkortelse>r jech ath skriwe</l>
<l id="2" id2="2">th<forkortelse>e</forkortelse>r man maa tidh<forkortelse>e</forkortelse>n m<forkortelse>edh</forkortelse> for driwe</l>
<l id="3" id2="3">om nog<forkortelse>e</forkortelse>r vndh<forkortelse>e</forkortelse>r i fordom skieddæ</l>
<l id="5" id2="100">i hwilken man th<forkortelse>et</forkortelse> lyst<forkortelse>e</forkortelse>r ath wedhe</l>
<l id="6" id2="101">for wor h<forkortelse>er</forkortelse>ræ hans fødzels aar</l>

------------------------
Avatar billede shadowsurfer Nybegynder
21. januar 2004 - 17:32 #1
Fik vist lige postet for hurtig

i eks txt mangler:
(

i eks ouput mangler:
<T

i ønsker eks ouput mangler:
<
Avatar billede erikjacobsen Ekspert
21. januar 2004 - 18:05 #2
Det er utestet, men du skal nok umiddelbart efter while-løkken skrive

if (s/^\£([0-9]*)//) {
  $lineNumberBrand = $1 -1;
}

og så ellers fortsætte med den if du har (minus den stump du flyttede udenfor)
Avatar billede shadowsurfer Nybegynder
21. januar 2004 - 19:36 #3
Sætter jeg

if (s/^\£([0-9]*)//) {
  $lineNumberBrand = $1 -1;
}

efter while løkken fanger den ikke £ og giver en fejl:
Use of uninitialized value in substitution (s///) at ./parser-raw-to-xml.pl line 61, <IN> line 882.
Avatar billede erikjacobsen Ekspert
21. januar 2004 - 22:16 #4
Og det hjælper ikke at skrive??

  if ($_=~s/^\£([0-9]*)//) {
Avatar billede shadowsurfer Nybegynder
22. januar 2004 - 10:06 #5
Få stadig ikke resten af linien med
Avatar billede shadowsurfer Nybegynder
22. januar 2004 - 10:10 #6
Har løst det... det var vist det man kalder en dumme fejl... nogen vil måske mene en fejl 40...

Skulle bare droppe else, så det der stå i else{....} bliver til ....
Så bliver der jo checkket hver gang, og ikke kun hvis de tidligere sætninger ikke bliver opfyldt...
Avatar billede shadowsurfer Nybegynder
22. januar 2004 - 10:10 #7
Men ellers tak for hjælpen!
Avatar billede erikjacobsen Ekspert
22. januar 2004 - 13:24 #8
Lyder godt - jeg samler ikke på point, så det er det dine.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester