yallayalla Geschrieben 14. September 2005 Geschrieben 14. September 2005 Hallo! Ich habe ein kleines bis mittleres Problem zur Zeit. Folgendes Szenario: Mein Skript soll eine lokal beim User gespeicherte .csv Datei einlesen und weiterverarbeiten. Das weiterverarbeiten fopen() und so funktioniert, nur wie lese ich die Datei aus und in welcher Form wird der Pfadname am besten übergeben? $Dateizeiger = fopen($link, "r"); liefert Warning: fgetcsv(): supplied argument is not a valid stream resource in C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\php.php on line 15 wobei in $link zur Zeit der Pfad zur Datei übergeben werden soll.... Es soll so aussehen: User wählt csv über ein Formular lokal auf seinem Rechner. csv wird übertragen/eingelesen und weiterverarbeitet Ich bin dankbar für jeden Tip. mfg yallayalla Zitieren
Krain Geschrieben 14. September 2005 Geschrieben 14. September 2005 copy($KDATA,"./test.dat"); $file = fopen("./test.dat","rw"); while($line = fgets($file)) { # tu irgentwas } fclose($file); [/PHP] Kopiere erst die hochgeladene Datei auf deinen Server, öffne diese dann und lies sie Zeilenweise aus. Danach kannst du die hochgeladene Datei entweder mit unlink([dateiname]) löschen, oder du läßt sie einfach dort liegen. Der Code ist ungetestet, sollte aber das Prinzip der Vorgehensweise klar machen. Zitieren
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Hallo! Also so habe ich das bis jetzt mal gebastelt: ----Eingabemaske <form action="data.php" method="post" enctype="multipart/form-data"> <p> Select the .csv file from your local machine :<br> <input name="link" type="file" size="50" maxlength="100000" accept="text/*"> <input type="submit" name="verweis" value="GO" onClick="self.location.href='data.php'"> </p> </form> Weiter in data.php <?php $link = $HTTP_POST_VARS["link"]; copy($link,"./test.csv"); $Zeilen = 1; $Dateizeiger = fopen(test.csv, "r"); while(($Daten=fgetcsv($Dateizeiger, 1000, ","))!==FALSE) solte dann hinhauen, oder? mfg yallayalla Zitieren
Monty82 Geschrieben 14. September 2005 Geschrieben 14. September 2005 $link = $HTTP_POST_VARS["link"]; copy($link,"./test.csv"); In der POST-Variable ist lediglich der Dateiname als String enthalten, der bringt Dir an dieser Stelle keinen Vorteil, da die eigentlich hochgeladene Datei physikalisch noch in einem temporären Verzeichnis auf dem Webserver liegt. Wo sie liegt, solltest Du über ein "print_r($_FILES)" herausfinden können. Dann kannst Du sie z.B. mit move_uploaded_file() zum Weiterverarbeiten verschieben, oder direkt von dort öffnen... Zitieren
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Hallo! Habe és soweit hinbekommen, nun ein anderes Prob. $Daten=fgetcsv($Dateizeiger, 1000, ","))!==FALSE) damit kann ich ja die csv zeilenweise auslesen.... Wie kann ich die erste Zeile NICHT auslesen, da ich die spaltenköpfe nicht brauche? Danke. mfg yallayalla Zitieren
Monty82 Geschrieben 14. September 2005 Geschrieben 14. September 2005 z.B. so: if ($Dateizeiger) fgetcsv($Dateizeiger, 1000, ","); while ($Dateizeiger && ($Daten=fgetcsv($Dateizeiger, 1000, ","))!==FALSE) { ... } [/PHP] oder so: [PHP] $first = true; while ($Dateizeiger && ($Daten=fgetcsv($Dateizeiger, 1000, ","))!==FALSE) { if ($first) $first = false; else { ... } } Zitieren
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Hallo und danke soweit. Wie kann ich nun fortlaufende Variablen erzeugen: habe nen zaehler x=0, der mit jedem durchlauf erhöht wird und immer die id mit nummer x erzeugen soll id0 id1 id2 id3 etc? mfg yallayalla Zitieren
Monty82 Geschrieben 14. September 2005 Geschrieben 14. September 2005 Ehrlich gesagt verstehe ich die Frage nicht...bitte nochmal präzisieren Zitieren
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Hallo! Also so: Ich möchte in einer schleife variablen erzeugen, die durchnummeriert sind. In der Schleife erhöht sich mit jedem Durchlauf der zaehler x um 1, Startwert 0. 1. Durchlauf: x=0 , erste Variable --> $id_0 2. Durchlauf: x=1 , zweite Variable --> $id_1 Also quasi soll mit jedem Durchlauf die Variable "id" erzeugt und durchgezählt werden, sodass ich nach 10 Durchläufen 10 Variablen habe: $id_0 $id_1 $id_2 $id_3 ... $id_9 mfg yallayalla Zitieren
Monty82 Geschrieben 14. September 2005 Geschrieben 14. September 2005 Welchen Sinn hat das Ganze denn? Warum verwendest Du nicht einfach ein Array? $contArr = array(); for ($i = 0; $i<10; $i++) { $contArr[$i] = "Inhalt Nr. ".$i; } Zugreifen kannst Du dann nachher so: echo "Array-Content Index 5: ".$contArr[5]; oder so: foreach ($contArr as $key=>$val) { echo "Array-Content Index ".$key.": ".$val; } Zitieren
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Hallo! Funzt nicht! hmm... bei jedem Durchlauf soll an stelle i der Wert von $Daten[1] eingefügt werden... mfg yallayalla Zitieren
Monty82 Geschrieben 14. September 2005 Geschrieben 14. September 2005 "$contArr[$i] = $Daten[1]" funktioniert nicht? Poste mal bitte etwas mehr Deines Codes... Zitieren
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 <?php $Zeilen = 1; $Dateizeiger = fopen("classlist-MAT113D.csv", "r"); while(($Daten=fgetcsv($Dateizeiger, 1000, ","))!==FALSE) { $AnzahlDerFelder = count($Daten); $x=0; $contArr = array(); for($i=0; $i<1; $i++) { echo $Daten[1]; $contArr[$x] = $Daten[1]; $x=$x+1; echo "</td>"; echo "</tr>"; "<br>"; } echo"</p>"; } fclose($Dateizeiger); echo "Array-Content Index 5: ".$contArr[3]; Die Ausgabe liefert dann: Notice: Undefined offset: 3 in phpA4.tmp on line 47 Zitieren
Monty82 Geschrieben 14. September 2005 Geschrieben 14. September 2005 Du musst das Array und die Zählvariable ausserhalb der While-Schleife initialisieren ($x = 0), die FOR-Schleife wird hier nicht benötigt, da Du manuell hochzählst ($x = $x +1)... $Zeilen = 1; $x = 0; $contArr = array(); $Dateizeiger = fopen("classlist-MAT113D.csv", "r"); while(($Daten=fgetcsv($Dateizeiger, 1000, ","))!==FALSE) { $AnzahlDerFelder = count($Daten); echo $Daten[1]; $contArr[$x] = $Daten[1]; $x++; // kürzer und schöner $x=$x+1; } fclose($Dateizeiger); echo "Array-Content Index 3: ".$contArr[3];[/PHP] Zitieren
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Hallo! Aua, da haette ich ja mal selber drauf kommen koennen! Ich danke vielmals! mfg yallayalla Zitieren
TheyCallMeGeek Geschrieben 14. September 2005 Geschrieben 14. September 2005 file() und explode() hätte ich benutzt... gibt einem das direkt als Array. Da aber shcon gelöst -> foobar. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.