Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tilføj string & slettet liner ...

1 view
Skip to first unread message

molsted

unread,
Jan 19, 2009, 5:27:26 AM1/19/09
to
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

unread,
Jan 19, 2009, 5:39:28 AM1/19/09
to
molsted <mol...@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

unread,
Jan 19, 2009, 8:02:38 AM1/19/09
to
On 19 Jan., 11:39, Peter Makholm <pe...@makholm.net> wrote:


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, zzzzzzzz, yyyyyyy
@nr:Match 2
@tur:mmmmm, nnnn, uuuuu
@nr:Match 3
@tur:aaa, qqqqq, ppppp

Jeg vil gerne ende ud med dette:
xxxxxxx, zzzzzzzz, 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

unread,
Jan 19, 2009, 9:56:06 AM1/19/09
to
molsted <mol...@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

unread,
Jan 20, 2009, 1:50:16 AM1/20/09
to
On 19 Jan., 15:56, Peter Makholm <pe...@makholm.net> wrote:

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

0 new messages