webForumDet fria alternativet

Läsa in fil och ersätta prylar

Perl & Ruby

21 svar · 469 visningar · startad av Erik Juhlin

Medlem sedan maj 200010 687 inlägg
Frågan#1

Jojoxx hjälpte mig med den här koden.

#!/usr/bin/perl

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
	($name, $value) = split(/=/, $pair);
	$value =~ tr/+/ /;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$form{$name} = $value;
}
# Ersätta tecken
$form{'mintext'} =~ s/</</g;
$form{'mintext'} =~ s/>/>/g;
$form{'mintext'} =~ s/\n/<br>/g;
# Skriv till fil
open(OUTDATA,">/clients/juhlin.nu/wwwroot/mp2d/flotmunk/text.inc");
print OUTDATA $form{'mintext'};
close(OUTDATA);
# Redirect
print "Location: default.asp\n\n";

Den ersätter som ni ser alla < och > med specialtecken och radbrytningar med <br>. Det används här: http://www.juhlin.nu/mp2d/default.asp?url=flotmunk

Nu vill jag skriva:

<textarea><!--#include virtual="/mp2d/flotmunk/text.inc"--></textarea>

Men då finns ju <br> och specialtecken med.

Det jag vill göra är alltså inkludera en Perl fil som läser in filen text.inc och sen ersätter <br> med radbrytning och specialtecken med < och >.
Sen skulle det även vara bra att veta hur man skrev SSI snutten eftersom att jag inte är så bra på det.

Någon som kan hjälpa mig? Borde inte vara så krångligt..? :)

Redigering: wF ändrade på koden lite.. :)

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

[Redigerat av Erik Juhlin den 09 feb 2001]

Medlem sedan nov. 19991 033 inlägg
#2

Du kan vända på koden som omvandlade dessa första gången till

$variabel=~ s/&amplt;/</g;
$variabel =~ s/&ampgt;/>/g;

För att redigera texten så öppnar du filen och infogar texten i textfältet.
Exempel:

$filen = "/clients/juhlin.nu/wwwroot/mp2d/flotmunk/text.inc";
open(INDATA,">$filen") or die "Kan inte hitta $filen: $!\n";
@file = <INDATA>;
close(INDATA);
$file =~ s/&amplt;/</g;
$file =~ s/&ampgt;/>/g;
$file =~ s/<br>/\n/g;

Texten infogas i detta fallet m.h.a.

<textarea>$file</textarea>

[Redigerat av FlashX den 09 feb 2001]

Medlem sedan maj 200010 687 inlägg
#3

Okej, men det är på en .shtml sida jag ska infoga det. Hur skriver jag då? :)

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan nov. 19991 033 inlägg
#4

Förstår inte riktigt hur du menar men
du får välja mellan SSI eller CGI.

Medlem sedan nov. 19991 033 inlägg
#5

Gäller det att bara inkludera själva filen text.inc i textfäletet så är det bara att ange

<textarea><!--#include virtual="text.inc"--></textarea>

men då har du ingen möjlighet att ändra i texten som beskrevs ovanför.
(möjligen med JavaScript kanske)

Medlem sedan maj 200010 687 inlägg
#6

Jag vill använda mig av SSI som jag skrev tidigare. Men jag vill "inkludera" Perl filen.
Tror det är så här:

<!--#exec cgi="/mp2d/flotmunk/fil.pl"-->

Stämmer det? Och hur skriver man i Perl filen? Bara att kopiera det du skrev i första inlägget?

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

[Redigerat av Erik Juhlin den 09 feb 2001]

Medlem sedan juni 20001 251 inlägg
#7

Stämmer. Du behöver inte redigera Perl-koden.

------------------
SteveNet - stevenet@webmarkit.net
Cogito ergo doleo.

Medlem sedan maj 200010 687 inlägg
#8

Hmmm, får det inte att funka alls. Jag skriver så här, men då står det bara "<textarea></textarea>" i koden..

#!/usr/bin/perl
$filen = "/clients/juhlin.nu/wwwroot/mp2d/flotmunk/text.inc";
open(INDATA,">$filen") or die "Kan inte hitta $filen: $!\n";
@file = <INDATA>;
close(INDATA);
$file =~ s/</</g;
$file =~ s/>/>/g;
$file =~ s/<br>/\n/g;
print "Content-type:text/html\n\n";
print "<textarea>$file</textarea>";

Var är felet? Det verkar som om varje gång jag kör det så töms text.inc

Redigering: Varje gång jag kör .pl filen..

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

[Redigerat av Erik Juhlin den 09 feb 2001]

Medlem sedan nov. 19991 033 inlägg
#9

Du bör först läsa in filen om du ska printa ut den i webbläsaren.

#!/usr/bin/perl
$filen = "/clients/juhlin.nu/wwwroot/mp2d/flotmunk/text.inc";
open(INDATA,"<$filen") or die "Kan inte hitta $filen: $!\n";
@file = <INDATA>;
$file = join("", @file);
close(INDATA);
$file =~ s/&amplt;/</g;
$file =~ s/&ampgt;/>/g;
$file =~ s/<br>/\n/g;

print ("Content-type: text/html\n\n");
print "<form method=\"post\" action=\"fil.pl\">";
print "<textarea name=\"mintext\" cols=\"35\" rows="8">\"$file\"</textarea>";
print "<input type=\"submit\" name=\"Submit\" value=\"Spara\">";
print "</form>";

Använder du exec cgi så bör du nu få texten i fältet.
För att skriva till filen så kan du använda koden från ditt första inlägg.

Medlem sedan nov. 19991 033 inlägg
#10

Redigerar inte för det blir så krångligt med &ampamp-tecknen :)

Nu skickas det till fil.pl men jag vet inte riktigt om du använder två skript (ett för exec cgi och ett för att skriva till filen) men du kan köra delen som skriver till filen som en subrutin om du vill.

Medlem sedan maj 200010 687 inlägg
#11

Funkar bra, men.. Funkar inte <!--#exec cgi="/mp2d/flotmunk/script2.pl"--> på IIS?

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan nov. 19991 033 inlägg
#12

Borde det väl göra?

Ser en liten miss av mig i koden ovanför.
rows="8">\"$file\"</textarea>";

bör ändras till
rows=\"8\">$file</textarea>";
i raden där textfältet printas ut.

Medlem sedan maj 200010 687 inlägg
#13

Alltså jag tänkte ändå skriva så här:

print $file;

Och sen lägga in SSI kraffset mellan textarea taggarna.. :)

Men det funkar inte.. :(

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan nov. 19991 033 inlägg
#14

hmm... men det var ju det jag menade förut, att du måste välja mellan CGI och SSI.
Det går inte i ett CGI-skript att inkludera en fil så som man gör i en .shtml-fil m.h.a. include virtual.

Varför måste du ha det så?
Borde finnas andra lösningar...

Medlem sedan maj 200010 687 inlägg
#15

Det borde gå. Vad är skillnaden på det här och en texträknare ( http://www.jojoxx.net/faq/ssi.html#counter )?

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan maj 200010 687 inlägg
#16

Sidan jag ska har formuläret på är en .asp fil (funkar som .shtml). Där länkar jag CGI filen med SSI (exec cgi..).

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan nov. 19991 033 inlägg
#17

exec cgi fungerar. Den koden fick du ju ovanför men om jag fatt rätt så vill du i den koden ange <textarea><!--#include virtual="/mp2d/flotmunk/text.inc"--></textarea> och det kan ju inte fungera.

Webbservern (om den är kofigurerad för det) vet hur den ska agera vid exec cgi eller include virtual men i nämnda fallet så är det ju perltolken som får den senare förfrågningen.

Om du har en .shtml-fil med <!--#exec cgi="/mp2d/flotmunk/fil.pl"-->, så behandlar perl denna koden och har du i den sedan angivit <!--#include virtual="/text.inc"-->, så förstår inte perl hur detta ska hanteras.
Webbservern får troligen aldrig denna informationen och kan alltså inte inkludera filen.

Medlem sedan maj 200010 687 inlägg
#18

Include virtual hade jag aldrig tänkt använda mig av. Men det var <!--#exec cgi="/mp2d/flotmunk/script2.pl"--> (och det är ju SSI) som jag tänkte använda, och det funkar inte.. :(

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan maj 200010 687 inlägg
#19

Aha, det fungerar inte med .asp, trots att ASP klarar av <!--#include virtual=".."-->. Då vet jag det! :)
Tack för all hjälp! Nu funkar det! Ska bara finslipas lite..

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

Medlem sedan maj 200010 687 inlägg
#20

Ännu ett litet problem. När \n ersätts med <br> så försvinner inte radbrytningen. Det gör att när det ersätts tillbaka så blir det två radbrytningar. Ska man då ta bort \n (i det här scriptet) så att det inte blir dubbla? Kan man bara låta det vara tomt där?

------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/

265 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)