PDA

Bekijk Volledige Versie : vervangen van " naar \" met perl (zie ook: Perl i.c.m. javascript)



Matthijs de Z
23/01/03, 00:25
Hoi,

Vanavond kreeg ik nog wat hulp een andere kant aangaande het probleem dat ik
beschreef in de posting "Perl i.c.m. javascript"
De foutmelding die ik steeds krijg heeft te maken met het feit dat er "
tekens in de te importeren tekst staan. Nu wil ik die dus vervangen door \".
Dat schijnt met perl te kunnen door een constructie die zoiets als dit zou
moeten zijn: $file =~s/\"/\/\"/g;

Maar nu krijg ik in de output overal /" i.p.v. \". Nu heb ik op
http://www.perl.com/doc/manual/html/pod/perlop.html gekeken voor wat meer
info, maar ik krijg het niet voor elkaar (omdat ik het deels niet snap door
gebrek aan info die ik voor handen heb), om die een \" te krijgen i.p.v. /".
Wie heeft een goede hulp pagina voor dit soort dingen, of kan me even
uitleggen wat ik zou moeten doen.
Groeten,

Matthijs

Matthijs de Z
23/01/03, 00:35
Voor die /" naar \" ben ik inmiddels uit. Het moest met $file =~s/\"/\\\"/g;

Maar ik houd nog steeds die tekenreeksfout... Ik heb ook alle / vervangen
door \/ en dan nog....
Welke perl freak kent de trucjes om dit aanhoudende probleem op te lossen.
Groeten,

Matthijs

> Hoi,
>
> Vanavond kreeg ik nog wat hulp een andere kant aangaande het probleem dat
ik
> beschreef in de posting "Perl i.c.m. javascript"
> De foutmelding die ik steeds krijg heeft te maken met het feit dat er "
> tekens in de te importeren tekst staan. Nu wil ik die dus vervangen door
\".
> Dat schijnt met perl te kunnen door een constructie die zoiets als dit zou
> moeten zijn: $file =~s/\"/\/\"/g;
>
> Maar nu krijg ik in de output overal /" i.p.v. \". Nu heb ik op
> http://www.perl.com/doc/manual/html/pod/perlop.html gekeken voor wat meer
> info, maar ik krijg het niet voor elkaar (omdat ik het deels niet snap
door
> gebrek aan info die ik voor handen heb), om die een \" te krijgen i.p.v.
/".
> Wie heeft een goede hulp pagina voor dit soort dingen, of kan me even
> uitleggen wat ik zou moeten doen.
> Groeten,
>
> Matthijs
>
>

Jeffrey Drooghenbroodt
23/01/03, 00:45
Matthijs de Z wrote:

> Voor die /" naar \" ben ik inmiddels uit. Het moest met $file
> =~s/\"/\\\"/g;
>
> Maar ik houd nog steeds die tekenreeksfout... Ik heb ook alle /
> vervangen door \/ en dan nog....
> Welke perl freak kent de trucjes om dit aanhoudende probleem op te
> lossen.

Niet enkel ", maar ook andere specials chars zoals \ en ' zul je moeten
escapen... Kan het eenvoudigst op dezelfde wijze. Begin met eerst de
bestaande \-tekens te escapen, om dubbels achteraf te vermijden.

Dus...
$file =~ s/\\/\\\\/g;
$file =~ s/\"/\\\"/g;
$file =~ s/\'/\\\'/g;

Ik denk dat dit de voornaamste zijn, maar ben te weinig thuis in
javascript om 100% zeker te zijn (en ja, dit kan zeker ook een stuk
korter geschreven worden, maar ik hou het liever overzichtelijk).

--
Jeffrey
http://www.pebbels.be/

Matthijs de Z
23/01/03, 00:55
> Dus...
> $file =~ s/\\/\\\\/g;
> $file =~ s/\"/\\\"/g;
> $file =~ s/\'/\\\'/g;
>
> Ik denk dat dit de voornaamste zijn, maar ben te weinig thuis in
> javascript om 100% zeker te zijn (en ja, dit kan zeker ook een stuk
> korter geschreven worden, maar ik hou het liever overzichtelijk).

Bedankt, maar zelfs nu krijg ik nog de foutmelding dat de
tekenreeksconstante niet is afgesloten...

Ik gebruik dit:

#!/usr/bin/perl
use LWP::Simple;
print "Content-type: text/plain\n\n";
$file = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
$file =~ s/\\/\\\\/g;
$file =~ s/\"/\\\"/g;
$file =~ s/\'/\\\'/g;
printf "document.write\(\"$file\");\n";


En dan <script src="http://www.beursanalyse.info/cgi-bin/test.pl"></script>
Groeten,

Matthijs

Jeffrey Drooghenbroodt
23/01/03, 13:35
Matthijs de Z wrote:

> #!/usr/bin/perl
> use LWP::Simple;
> print "Content-type: text/plain\n\n";
> $file = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
> $file =~ s/\\/\\\\/g;
> $file =~ s/\"/\\\"/g;
> $file =~ s/\'/\\\'/g;
> printf "document.write\(\"$file\");\n";


Net even wat zitten experimenteren... Wat doet onderstaand script?

#!/usr/bin/perl
use LWP::Simple;
print "Content-Type: application/x-javascript\n\n";
$file = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
$file =~ s/\\/\\\\/g;
$file =~ s/\'/\\\'/g;
printf "document.write\(\'$file\'\);\n";

--
Jeffrey
http://www.pebbels.be/

Matthijs de Z
23/01/03, 14:05
> Net even wat zitten experimenteren... Wat doet onderstaand script?

Helaas blij ik nog steeds de melding krijgen dat de tekenreeksconstante niet
is afgesloten :-(
Je zou toch denken dat het een heel simpel probleempje is...maar ben er
inmiddels echt al ruim een dag mee bezig. En een aantal van jullie hebben er
dus ook al tijd in gestoken, waarvoor dank. Maar ja..het werkt dus nog
steeds niet.
Groeten,

Matthijs


> #!/usr/bin/perl
> use LWP::Simple;
> print "Content-Type: application/x-javascript\n\n";
> $file = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
> $file =~ s/\\/\\\\/g;
> $file =~ s/\'/\\\'/g;
> printf "document.write\(\'$file\'\);\n";
>
> --
> Jeffrey
> http://www.pebbels.be/

Matthijs de Z
23/01/03, 14:15
> Net even wat zitten experimenteren... Wat doet onderstaand script?

Helaas blijf ik nog steeds de melding krijgen dat de tekenreeksconstante
niet is afgesloten :-(
Je zou toch denken dat het een heel simpel probleempje is...maar ben er
inmiddels echt al ruim een dag mee bezig. En een aantal van jullie hebben er
dus ook al tijd in gestoken, waarvoor dank. Maar ja..het werkt dus nog
steeds niet.
Groeten,

Matthijs


> #!/usr/bin/perl
> use LWP::Simple;
> print "Content-Type: application/x-javascript\n\n";
> $file = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
> $file =~ s/\\/\\\\/g;
> $file =~ s/\'/\\\'/g;
> printf "document.write\(\'$file\'\);\n";
>
> --
> Jeffrey
> http://www.pebbels.be/

robert
23/01/03, 14:35
Matthijs de Z <haalallesvoorhetstreepjeplushetstreepjezelfweg-mldz@hotmail.com>:
> Helaas blijf ik nog steeds de melding krijgen dat de tekenreeksconstante
> niet is afgesloten :-(

Het volgende werkt bij mij op precies dezelfde manier als jij zou willen:
-snip-
use LWP::Simple;
print "Content-Type: application/x-javascript\r\n\r\n";

my $file = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
$file =~ s,',\\',gs;
$file =~ tr,\r\n, ,s;
print qq{document.write('$file');};
-snip-

--
robert

Matthijs de Z
23/01/03, 14:45
> Het volgende werkt bij mij op precies dezelfde manier als jij zou willen:

Inderdaad...HET WERKT!!! Hé wat goed man. Heel erg bedankt!
Heb je misschien een link voor me naar een pagina waar ik eens heel goed kan
lezen wat al die tekens nu betekenen? Want ik weet het maar voor een deel.
Groeten,

Matthijs

> -snip-
> use LWP::Simple;
> print "Content-Type: application/x-javascript\r\n\r\n";
>
> my $file = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
> $file =~ s,',\\',gs;
> $file =~ tr,\r\n, ,s;
> print qq{document.write('$file');};
> -snip-
>
> --
>
robert

robert
23/01/03, 14:55
Matthijs de Z <haalallesvoorhetstreepjeplushetstreepjezelfweg-mldz@hotmail.com>:
> Heb je misschien een link voor me naar een pagina waar ik eens heel goed
> kan lezen wat al die tekens nu betekenen? Want ik weet het maar voor een
> deel.

Ik kan het je wel ff uitleggen:

>> $file =~ s,',\\',gs;

Hiermee escape je elke single-quote door er een \ voor te zetten. Dat moet
omdat de Javascriptcode single-quotes gebruikt voor het omsluiten van een
string.

>> $file =~ tr,\r\n, ,s;

Hiermee vervang je newlines en carriagereturns door spaties. Hier ging het
overigens mis bij je; als je dat namelijk niet doet krijg je Javascript
code als volgt:

document.write('regel 1
regel 2');

Dat mag niet (en dat is dus die niet-afgesloten tekenreeks error).

>> print qq{document.write('$file');};

Dit is hetzelfde als:
print "document.write('$file');";

--
robert

Matthijs de Z
23/01/03, 15:05
> Ik kan het je wel ff uitleggen:

Nogmaals bedankt voor de moeite ;-)
groeten,

Matthijs