/ 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
Tilføj string & slettet liner ...
Fra : molsted


Dato : 19-01-09 03:27

Hejsa
Jeg har et par problemer med et lille script, jeg har behov for at
slette liner der indholder følgende:
@nr:Match et tal
Jeg har prøvet følgende:
$line =~ s/^@nr:Match [0-9]//g;

Ligeledes har jeg behov for at tilføje en tabulator samt et ord til
slut på linien
if ($line =~ m/^\@tur:/) {
   # Tilføj '\tBox'
   $line =~ s/\m/tBox\m/
}


--
René

 
 
Peter Makholm (19-01-2009)
Kommentar
Fra : Peter Makholm


Dato : 19-01-09 11:39

molsted <molsted@gmail.com> writes:

> Jeg har et par problemer med et lille script, jeg har behov for at
> slette liner der indholder følgende:
> @nr:Match et tal
> Jeg har prøvet følgende:
> $line =~ s/^@nr:Match [0-9]//g;

Dit problem er at s/// interpolerer variable. Det vil sige at @nr
bliver erstattet med indholdet af arrayet @nr. Letteste løsning er at
escape @'et:

s/^\@nr:Match: \d//g

>
> Ligeledes har jeg behov for at tilføje en tabulator samt et ord til
> slut på linien
> if ($line =~ m/^\@tur:/) {
>    # Tilføj '\tBox'
>    $line =~ s/\m/tBox\m/

Hvad er det lige at \m skulle betyde?

Og hvis du skal tilføje en tabulator mangler de escape-tegnet før
t'et.

> }


//Makholm

molsted (19-01-2009)
Kommentar
Fra : molsted


Dato : 19-01-09 06:03

On 19 Jan., 11:39, Peter Makholm <pe...@makholm.net> wrote:
> molsted <mols...@gmail.com> writes:
> > Jeg har et par problemer med et lille script, jeg har behov for at
> > slette liner der indholder følgende:
> > @nr:Match et tal
> > Jeg har prøvet følgende:
> > $line =~ s/^@nr:Match [0-9]//g;
>
> Dit problem er at s/// interpolerer variable. Det vil sige at @nr
> bliver erstattet med indholdet af arrayet @nr. Letteste løsning er at
> escape @'et:
>
>     s/^\@nr:Match: \d//g
>
>
>
> > Ligeledes har jeg behov for at tilføje en tabulator samt et ord til
> > slut på linien
> > if ($line =~ m/^\@tur:/) {
> >    # Tilføj '\tBox'
> >    $line =~ s/\m/tBox\m/
>
> Hvad er det lige at \m skulle betyde?
>
> Og hvis du skal tilføje en tabulator mangler de escape-tegnet før
> t'et.
>
> > }
>
> //Makholm


Hejsa,
jeg er kommet lidt videre nu, men det kniber lidt med dette:
   if ($line =~ m/^\@tur:/) {
      $line =~ s/\n/Box\n/g ;
      $line =~ s/\@tur://g ;
   }

Eksempel på data:

@nr:Match 1
@tur:xxxxxxx, zz, yyyyyyy
@nr:Match 2
@tur:mmmmm, nnnn, uuuuu
@nr:Match 3
@tur:aaa, qqqqq, ppppp

Jeg vil gerne ende ud med dette:
xxxxxxx, zz, yyyyyyy<tab>Box
mmmmm, nnnn, uuuuu<tab>Box
aaa, qqqqq, ppppp<tab>Box



#!/usr/bin/perl

my $fileName=$ARGV[0];

open(FILE,$fileName) || die("Cannot Open File");
my(@fcont) = <FILE>;
close FILE;

open(FOUT,">$fileName") || die("Cannot Open File");
foreach $line (@fcont) {

   # Converting line breaks to UNIX-style
   $line =~ s/\r\n?/\n/g ;

   if ($line =~ m/^\@tur:/) {
      $line =~ s/\n/Box\n/g ;
      $line =~ s/\@tur://g ;
   }

   $line =~ s/\@nr:Match \d\n//g ;

   print FOUT $line;
}
close FOUT;

--
Rene

Peter Makholm (19-01-2009)
Kommentar
Fra : Peter Makholm


Dato : 19-01-09 15:56

molsted <molsted@gmail.com> writes:

> jeg er kommet lidt videre nu, men det kniber lidt med dette:
>    if ($line =~ m/^\@tur:/) {
>       $line =~ s/\n/Box\n/g ;
>       $line =~ s/\@tur://g ;
>    }

Hvad er dit problem?

For mig gør det præcis hvad man måtte forvente. Erstatter det
afsluttende linjeskift med "^HBox\n" og fjerner '@tur:'.

//Makholm

molsted (19-01-2009)
Kommentar
Fra : molsted


Dato : 19-01-09 23:50

On 19 Jan., 15:56, Peter Makholm <pe...@makholm.net> wrote:
> molsted <mols...@gmail.com> writes:
> > jeg er kommet lidt videre nu, men det kniber lidt med dette:
> >    if ($line =~ m/^\@tur:/) {
> >            $line =~ s/\n/ Box\n/g ;
> >            $line =~ s/\@tur://g ;
> >    }
>
> Hvad er dit problem?
>
> For mig gør det præcis hvad man måtte forvente. Erstatter det
> afsluttende linjeskift med "^HBox\n" og fjerner '@tur:'.
>
> //Makholm

Kan det have noget med encoding at gøre?
Filerne kommer fra Windows og de bliver behandlet på en Mac, så jeg
sender filerne igennem iconv (/usr/bin/iconv -f WINDOWS-1252 -t
MACROMAN).

Hvis jeg ændre ' if ($line =~ m/^\@tur:/) {' til ' if ($line =~ m/
\@tur:/) {' fanger jeg aller linie i filerne, højest besynderligt men
den gør som forventet: Erstatter det
> afsluttende linjeskift med "^HBox\n" og fjerner '@tur:'.

--
Rene

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste