[perl] vreemd probleem

Pagina: 1
Acties:

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Ik heb het volgende probleem:

ik heb een perl bestandje dat het volgende moet doen:

hij moet van een regel
code:
1
bla=spef melp woei

het volgende maken:
code:
1
bla="spef melp woei"


nu heb ik het volgende programma:

code:
1
2
3
4
5
6
#!/usr/bin/perl

while(<>){
        s/^(.*)\=(.*)$/$1\=\"$2\"/;
        print;
}


en dit werkt prima als ik ./test.pl uitvoer en die regels invoer.

maar als ik het volgende bestandje cat naar dat programma (cat test.txt | ./test.pl), dan krijg ik volgende uitvoer:
code:
1
2
3
4
5
6
7
8
name=Blackstorm (Report Faulty Spawn)
level=1 1
model=987
type=6
bounding_radius=1.000000
combat_reach=1.558700
attack=2000 2000
damage=1.010000 1.010000


code:
1
2
3
4
5
6
7
8
"ame="Blackstorm (Report Faulty Spawn)
"evel="1 1
"odel="987
"ype="6
"ounding_radius="1.000000
"ombat_reach="1.558700
"ttack="2000 2000
"amage="1.010000 1.010000


dus die " komt vooraan de string te staan, en vervangt het eerste karakter. Het moet natuurlijk gewoon achter aan de string komen te staan, weet iemand wat ik fout doe?

  • jvhaarst
  • Registratie: Maart 2000
  • Laatst online: 03-04 22:46

jvhaarst

Eendracht maakt macht

Doet ie het wel als je het bestand eerst door dos2unix gooit ?
Ik gok dat de line-ends niet kloppen.

Iets anders zou ik ook niet kunnen verzinnen, je code ziet er OK uit.

[ Voor 27% gewijzigd door jvhaarst op 09-04-2005 20:17 ]

If you don’t have enough time, stop watching TV.


  • windancer
  • Registratie: Maart 2000
  • Laatst online: 08-05 15:34
Bij mij doet ie het wel. Staat er ook een " aan het begin van de eerste regel ?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02-05 01:32
Lijkt mij een typisch geval van DOS line endings; ipv. \n staat er dan \r\n. Die $ matcht het einde van de regel (net voor \n), dus foo=bar\r\n wordt foo="bar\r"\n. Die \r zorgt ervoor dat de cursor teruggaat naar het begin van de regel, waar 'ie dus de quote van het einde print.

[ Voor 4% gewijzigd door Soultaker op 09-04-2005 23:16 ]


  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Soultaker schreef op zaterdag 09 april 2005 @ 23:16:
Lijkt mij een typisch geval van DOS line endings; ipv. \n staat er dan \r\n. Die $ matcht het einde van de regel (net voor \n), dus foo=bar\r\n wordt foo="bar\r"\n. Die \r zorgt ervoor dat de cursor teruggaat naar het begin van de regel, waar 'ie dus de quote van het einde print.
Ik was er ondertussen achter gekomen, maar dat was het inderdaad. Blame it on the windows :)