Veröffentlicht 14. September 200520 j 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
14. September 200520 j 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.
14. September 200520 j 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
14. September 200520 j $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...
14. September 200520 j 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
14. September 200520 j 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 { ... } }
14. September 200520 j 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
14. September 200520 j 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
14. September 200520 j 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; }
14. September 200520 j Hallo! Funzt nicht! hmm... bei jedem Durchlauf soll an stelle i der Wert von $Daten[1] eingefügt werden... mfg yallayalla
14. September 200520 j "$contArr[$i] = $Daten[1]" funktioniert nicht? Poste mal bitte etwas mehr Deines Codes...
14. September 200520 j <?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
14. September 200520 j 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]
14. September 200520 j Hallo! Aua, da haette ich ja mal selber drauf kommen koennen! Ich danke vielmals! mfg yallayalla
14. September 200520 j file() und explode() hätte ich benutzt... gibt einem das direkt als Array. Da aber shcon gelöst -> foobar.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.