Hi
ich hab nen Problem gerade. wie kann ich mit Perl nur eine bestimmte Zeile aus einer Datei lesen? Ich will nicht immer gleich die ganze Datei einlesen, wenn ich doch nur eine bestimmte Zeile brauche…
normalerweise lese ich Dateien immer so ein:
so schmeiss ich aber immer gleich alles in den Array. Und wie würde ich jetzt z.B. Zeile 5 einlesen und in einen Skalar schreiben? Die Zeile die ich haben will weiss ich ja auch. Jetzt muss ich nur noch wissen, wie ich das dem Perl beibringe.
mhhh, egal wie ich es gedreht habe, Dein Code funktioniert nicht ganz ich bekomme nie irgendwas zurück … nur eine leere Variable, obwohl in der Zeile etws drinne steht. Also habe ich jetzt erstmal die Geschichte so gelöst:
funktioniert auch, aber eben nur wieder über den Umweg, erst alles in einen Array zu schreiben und dann nur den entsprechenden Array Teil zurückzugeben. Ich weiss nur nicht, ob sowas nicht unnötig viel Serverlast fabriziert. Oder?
Gruß,
Martin
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
funktioniert auch, aber eben nur wieder über den Umweg, erst
alles in einen Array zu schreiben und dann nur den
entsprechenden Array Teil zurückzugeben. Ich weiss nur nicht,
ob sowas nicht unnötig viel Serverlast fabriziert. Oder?
Hm, naja nicht unbedingt, aber du liest halt mehr Zeilen ein als nötig, z.b. wenn eine Datei 1000 Zeilen hat und du willst Nr. 5 dann ist das nicht gerade effizient
Kannste nicht einfach ne for-schleife machen, die die Zeilen davor einmüllt? Ich glaube darauf hat auch der andere Vorschlag abgezielt.
Also ich weiss jetzt nicht, ob ich mich zu blöde anstelle oder nicht aber ich kann mich bei eurem Code auf den Kopf stellen, er funktioniert einfach nicht hier mal der komplette sub, dan ich dazu habe:
sub read\_SingleProfileData {
@list = &memberlist; #aufruf, einer dateiliste aller User
foreach $temp (@list) {
chomp($temp);
($name, $memberfile) = split(/\|/, $temp);
if ($name eq $\_[0]) { #wenn der name stimmt, die datei (Profiledatei) öffnen
open(MEMBERPROFILE, "$memberfile.cgi");
$zeile = $\_[1];
for ($i=1; $i ;
}
$memberinhalt = ;
close(MEMBERPROFILE);
}
}
return $memberinhalt;
}
#aufruf des sub´s, so:
$eMail = &read\_SingleProfileData("name das users",5);
print "$eMail";
was ich beim Aufruf bekomme ist allerdings immer nur die 1. Zeile des Profiles, sonst nichts. Ob ich da nun schreibe, das ich zeile 5 haben will oder 3 oder 1 ist völlig egal, ich bekomme IMMER nur die 1. Zeile der Datei zurück Ideen? *hoff*
sub read\_SingleProfileData {
...
$zeile = $\_[1];
for ($i=1; $i ;
}
$memberinhalt = ;
...
}
Ohne das Problem genau auf den ersten Blick zu sehen, würd ich mir nach deiner Fehlerbeschreibung mal folgende Zeile genauer anschauen
$zeile = $\_[1];
Steht in dem $_[1] auch wirklich die Zeilennummer drin? So wie das klingt, steht da wahrscheinlich gar nix drin (bzw. 0), weswegen das Programm gar nie in die for-schleife reinläuft und auch keine vorherigen Zeilen einmüllt.
doch doch, funzt ja. Nur halt über den Umweg, erst die komplette Datei einzulesen und dann die gewünschte Zeile aus der Vaiable zu entnehmen.
Ich habe aber mittlerweile das Problem mit einer for Schleife beheben können Kannst Du weiter unten lesen
Trotzdem danke