Hilfe mit einem konvertierungsScript
dairaen
- perl
Ich versuche schon länger ein Script zu entwickeln,
1.)welches aus einer gegebenen .txt Datei ausliest und aus deren Inhalt eine html Datei erzeugt.
Die .txt enthält immer (durch \n getrennt) zwei Eintrage
untereinander.
damit wäre mir schon viel geholfen, aber:
2.)Zudem soll das Script die txt. sortieren können und ein User soll über den Browser einträge löschen können.
mein Versuch:
require "cgi-lib.pl";
&parse_form;
if ($in{'passwd'} eq 'admin')
{
$old = "<Xitami/webpages/eintrag/eintrag.txt";
$new = ">Xitami/webpages/eintrag/autos.htm";
open(INFILE, $old) or die "datei existiert nicht!";
open(NEW, $new);
while (<INFILE>)
{
@Inhalt = <INFILE>;
print NEW " @Inhalt \n";
close(NEW);
}
close(INFILE);
}
die;
wer kann mir helfen? danke im voraus!
Hallo,
also ich hab nicht ganz verstanden, wozu das gut sein soll, aber dein script kommt mir schonmal spanisch vor. ich sag dir einfach was ich denke (ohne gewähr ;)
require "cgi-lib.pl";
&parse_form;
if ($in{'passwd'} eq 'admin')
{
$old = "<Xitami/webpages/eintrag/eintrag.txt";
$new = ">Xitami/webpages/eintrag/autos.htm";
open(INFILE, $old) or die "datei existiert nicht!";
open(NEW, $new);
»» while (<INFILE>)
»» {
{@Inhalt = <INFILE>;
print NEW " @Inhalt \n";}
statt diesem kuddelmuddel könntest du schonmal: print NEW " $_ \n";
schreiben, dann kopierst du INFILE nach NEW.
close(NEW);
das ist nicht gut.. die schleife wird für jede zeile aus INFILE durchlaufen, und jedesmal wird in NEW geschrieben. wenn du NEW jetzt schon beim ersten schleifendurchlauf schließt, ist das sehr komisch..
»» }
close(INFILE);
}
die;
wer kann mir helfen? danke im voraus!
so.. naja, was genau soll das script jetzt machen und wofür willst du das dann verwenden? vielleicht kann ich dir dann eher helfen..
Danny
Hi und danke erstmal,
also das Script soll aus einer vorher generierten (über FORM) txt datei die Daten auslesen und aus diesem Inhalt eine neue HTML Datei erzeugen.
(Der Kunde gibt über den Browser Daten ein (FORM) diese werden in eintrag.txt gespeichert (das Script hab ich schon so einigermaßen), dann soll der Kunde aus dieser Datei auf Wunsch eine WebSite erstellen können (dieses Script jetzt). Zudem braucht er Funktionen um die Einträge zu sortieren und eventuell zu löschen.)
ich hoffe ich hab es jetzt klarer formuliert. All dies soll ein USER per mausklick in seinem Browser erledigen können.
Hi,
also das Script soll aus einer vorher generierten (über FORM) txt datei die Daten auslesen und aus diesem Inhalt eine neue HTML Datei erzeugen.
(Der Kunde gibt über den Browser Daten ein (FORM) diese werden in eintrag.txt gespeichert (das Script hab ich schon so einigermaßen), dann soll der Kunde aus dieser Datei auf Wunsch eine WebSite erstellen können (dieses Script jetzt). Zudem braucht er Funktionen um die Einträge zu sortieren und eventuell zu löschen.)
ich hoffe ich hab es jetzt klarer formuliert. All dies soll ein USER per mausklick in seinem Browser erledigen können.
Okay, jetzt ist mir das schon klarer..
Die Daten kannst du etwa wie folgt aus der txt in die HTML datei schreiben lassen:
while (<INFILE>)
{
print NEW;
}
damit wird die datei 1:1 übertragen.
das mit dem sortieren und löschen ist schon komplizierter.
die datensätze musst du dann etwa so in einem formular ausgeben:
print "<form u.s.w...>";
$i=0;
while(<INFILE>)
{
print "<input type=checkbox name=select$i value=1>".ecscape($_);
$i++;
}
(auf jeden fall hoffe ich, dass das so geht..)
das script zum löschen könnte dann so aussehen:
&get_form_data;
@liste=<ALTEDATEI>
$i=0;
for (@liste)
{
unless ($formdata{"select$i"}) {print NEUEDATEI;}
$i++;
}
das zum ändern kann ich dir gerade nicht beanworten (muss ganz drigent weg) ich hoffe, ich konnte dir schonmal ein wenig weiterhelfen...
*wegflitz*
Ich versuche schon länger ein Script zu entwickeln,
1.)welches aus einer gegebenen .txt Datei ausliest und aus deren Inhalt eine html Datei erzeugt.
$old = "<Xitami/webpages/eintrag/eintrag.txt";
$new = ">Xitami/webpages/eintrag/autos.htm";
open(INFILE, $old) die "datei existiert nicht!";
@txt = <INFILE>;
close(INFILE);
$html[0] = "<html><head><title>Titel</title></head><body>";
foreach(@txt) { push(@html,$_); }
push(@html,"</body></html>");
open(OUTFILE, $new);
print OUTFILE @html;
close(OUTFILE);
2.)Zudem soll das Script die txt. sortieren können und ein User soll über den Browser einträge löschen können.
Sortieren ist einfach. Angenommen, du hast wie oben die Textdatei in einer Liste namens @txt, kannst du einfach notieren:
@txt = sort(@txt);
Das andere ist natuerlich aufwendiger. Dazu musst du erst mal HTML-Code an den Browser schicken, und zwar so, dass der Inhalt von @txt mit im HTML-Code drin ist, und zwar auch wieder so, dass der Anwender angeben kann, welche Zeile davon er loeschen will. Man koennte es z.B. so machen:
print "content-type: text/html\n\n";
print "<html><head><title></title><body><form action=$Script method=post>\n";
$i = 0;
foreach $i++ (@txt) {
print "$_ <input type=checkbox name="Zeile" value="$i"> loeschen!<br>";
}
print "<input type=submit></form></body></html>\n";
So kann der Anwender die einzelnen Zeilen, die er loeschen will, via Formular ankreuzen. Nach Absenden des Formulars wird wieder ein Script aufgerufen, das dann die Formulareingaben auswerten und die betreffenden Zeilen aus der Datei loeschen muss. Wenn du so weit bist, kannst du dich ja wieder melden <g>.
So, und jetzt noch ein paar Worte zum Thema "Antworten": es wird derzeit zwar wahnsinnig schnell auf jede Frage geantwortet, aber viele Antworten sind eher dumme Kommentare und helfen dem Fragesteller keinen Deut weiter. Koennt ihr euch bitte mal mehr zusammenreissen und nur antworten, wenn ihr eine konkrete Antwort wisst? Und euch auch mal mehr als 10 Sekunden Zeit lassen beim Antworten? Es gibt hier keinen Wettbewerb, moeglichst oft den eigenen Namen in der Forumsdatei zu finden. Wenn es hier ueberhaupt einen Wettstreit gibt, dann den, auch noch die kniffligsten Probleme gemeinsam loesen zu koennen.
viele Gruesse
Stefan Muenz
Lieber Stefan..
Sortieren ist einfach. Angenommen, du hast wie oben die Textdatei in einer Liste namens @txt, kannst du einfach notieren:
@txt = sort(@txt);
Ich denke nicht, dass er die Sortierung nur alphabetisch vornehmen wollte, aber das ist nicht mein anliegen...
Man koennte es z.B. so machen:
[...]
print "$_ <input type=checkbox name="Zeile" value="$i"> loeschen!
";
Hierzu habe ich eine Frage, da ich schonmal dasselbe versucht habe. Wenn ich dann die ich dann die Checboxen zu (1,5,6,19) angeklickt habe (zum beispiel) wie prüfe ich dann im Perlcode, ob die variable "Zeile" gerade diese VIER werte hat? Damit habe ich verständnisschwierigkeiten (und das ist der grund, warum ich dann "name=delete$i value=1" verwende)
So, und jetzt noch ein paar Worte zum Thema "Antworten": es wird derzeit zwar wahnsinnig schnell auf jede Frage geantwortet, aber viele Antworten sind eher dumme Kommentare und helfen dem Fragesteller keinen Deut weiter.
Ich habe aber leider folgendes Problem:
Sobald ich etwas kniffligere fragen stelle, bekommen ich überhaupt keine antwort mehr.
nach wenigen stunden ist das posting eh in der versenkung verschwunden.
Deswegen wünschte ich mir manchmal lieber ein paar unqualifizierte antworten, als gar keine, einfach um das thema diskutieren zu können. Vielleicht würde es helfen, wenn man eine funktion einbauen würde sich die antworten auf sein posting zumailen zu lassen. aber auch dann ist das problem, dass postings nach zwei tagen ins archiv wandern..
Ich sehe da zwar keine lösung, aber schnelle antworten wären mir trotzdem lieber.
Also bis dann und ich bin mal gespannt, ob noch irgendjemand dieses Posting hier bemerkt...
Danny
Sobald ich etwas kniffligere fragen stelle, bekommen ich überhaupt keine antwort mehr.
nach wenigen stunden ist das posting eh in der versenkung verschwunden.
Deswegen wünschte ich mir manchmal lieber ein paar unqualifizierte antworten, als gar keine, einfach um das thema diskutieren zu können. Vielleicht würde es helfen, wenn man eine funktion einbauen würde sich die antworten auf sein posting zumailen zu lassen. aber auch dann ist das problem, dass postings nach zwei tagen ins archiv wandern.
Wenn die Frage so knifflig ist, daß sie niemand beantworten *kann*, dann http://www.teamone.de/selfaktuell/forumfaq.htm#a4.
Macht nichts, ist mir auch schon passiert. Versuchen kann man es ja mal. Besser keine Antwort im Archiv als 30 off-topics.
Ansonsten kann ich jedem Fragesteller nur empfehlen, seine Fragen "attraktiv" zu formulieren. Die Forum-FAQ gibt dazu reichlich Hinweise; ganz subjektiv möchte ich ergänzen:
Der potentielle Antworter (jedenfalls ich ...) will der Überschrift entnehmen können, ob er in der Lage sein *könnte*, die Frage zu beantworten.
Vor allem aber, ob ihn selbst gerade diese Materie besonders interessiert! (Postings über JavaScript lese ich nur, wenn ich wirklich Langeweile habe - oder wenn Antje darauf geantwortet hat ;-)
Und er will dem Fragetext alle wesentlichen Aspekte des Problems entnehmen können, ohne dreimal rückzufragen.