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