Lezen + schrijven van CSV

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Task b

task b

06/07/2010 10:00:04
Quote Anchor link
Ben langzaamaan PHP aan het leren en wilde een beetje dingen proberen met CSV files.
Wat ik nu probeer is om een array in een CSV file te plaatsen (dat lukt op dit moment). Om datzelfde bestand daarna weer uit te lezen en in een andere CSV file te schrijven. Alleen hier zit het probleem ik kan het bestand wel uitlezen maar ik kan het niet opnieuw wegschrijven. Ik krijg nu de foutmelding:
Warning: Invalid argument supplied for foreach(). Ik weet dat deze melding betekent dat er een foutief variabele wordt meegegeven maar (voor zover ik weet) geef ik toch echt een array mee. Hieronder de code:
//schrijven naar de array

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
            $list
= array
            (
            "josef,durba,Bos,EN",
            "sjaqeline,toulors,paris,FR",
             );


        $file = fopen("c://temp.csv", "w");

        foreach ($list as $line) {
            fputcsv($file, split(',', $line));
        }

        fclose($file);

//bestand opnieuw wegschrijven.
        $bestand = fopen("c://temp.csv", "r+");
        $bestand2 = fopen("c://temp2.csv", "r+");
        while (!feof($bestand)) {
            $csvArray = fgetcsv($bestand, 1024);

            foreach ($csvArray as $line) {
                     fputcsv($bestand2, split(',', $line));

            }
        }

        //deze print_r staat er als controle om te kijken wat er in de array     zit en dat zijn de juiste waarde
        print_r($csvArray);
        
        fclose($bestand);
        fclose($bestand2);
?>



Ik heb echt geen idee wat er fout gaat en waarom de melding wordt weergeven. Er wordt trouwens wel naar temp2.csv geschreven alleen alles is aan elkaar geplakt. De comma's zijn opeens verdwenen. dus het ziet er nu zo uit:
josefdurbaBosENsjaqelinetoulorsparisFR
De foutmelding blijft ook voorkomen, dus iemand ideen? alvast bedankt.
 
PHP hulp

PHP hulp

26/04/2024 12:09:42
 
Erik Rijk

Erik Rijk

06/07/2010 10:09:11
Quote Anchor link
Ik doe het zelf op de volgende manier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$sPath
= '/tmp/';

$sFileName = 'maandelijkse_respondenten.csv';

$rHandle = fopen($sPath.$sFileName, "w+") or die("ERROR: could not open file! :o");
$sEol = "\r\n";
fwrite($rHandle, '"' . implode('";"', array("client_id","gender","firstname","surname_prefix","surname","street","housenumber","additive","zipcode","city","email","birthday","home_telephone","cell_telephone")) .'"'.$sEol);
?>


Misschien dat je hier wat aan hebt?
 
Task b

task b

06/07/2010 11:45:57
Quote Anchor link
Erik Rijk op 06/07/2010 10:09:11:
Ik doe het zelf op de volgende manier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$sPath
= '/tmp/';

$sFileName = 'maandelijkse_respondenten.csv';

$rHandle = fopen($sPath.$sFileName, "w+") or die("ERROR: could not open file! :o");
$sEol = "\r\n";
fwrite($rHandle, '"' . implode('";"', array("client_id","gender","firstname","surname_prefix","surname","street","housenumber","additive","zipcode","city","email","birthday","home_telephone","cell_telephone")) .'"'.$sEol);
?>


Misschien dat je hier wat aan hebt?


Aan de hand van jouw code ben ik zelf nog dingen gaan onderzoeken dus het heeft goed geholpen. Ik kan nu me bestand uitlezen en opnieuw wegschrijven en kan hem zelf naar een database schrijven. HOWEVER ik zit nu met een ander probleem namelijk 'er wordt een array teveel ingelezen'. Ik krijg deze output als ik met print_r doe:
de lijn is :josef,durba,Bos,EN
Array ( [0] => josef [1] => durba [2] => Bos [3] => EN ) de lijn is :sjaqeline,toulors,paris,FR
Array ( [0] => sjaqeline [1] => toulors [2] => paris [3] => FR ) de lijn is :
Array ( [0] => )

er wordt dus 1 keer teveel door de loop gelopen maar ik kan zelf er echt niet uitkomen waarom ie dat doet hier de code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$lineseparator
= "\n";
        // $bestand = fopen("c://temp.csv", "r+");
         $bestand = fopen("c://temp2.csv", "r+");
         $file = fopen("c://temp.csv", "r");
         $bestand2 = fread($file, filesize("c://temp.csv"));
         fclose($file);

        // fclose($bestand);
         $fieldseparator = ",";
         $lines = 0;
         foreach (split($lineseparator, $bestand2) as $line) {

              $lines++;
              $line = trim($line, " \t");
              echo "de lijn is :".$line."<br>";
              $regelArray = explode(",", $line);
              print_r($regelArray);
                //$linemysql = implode(',', $regelArray);
                //echo "na te zijn geexplodeerd is het :".$linemysql."<br>";

                fputcsv($bestand,$regelArray);
         }

?>


dus in principe wordt alles goed weggeschreven alleen wordt er 1 leeg veld aan toegevoegd en dat is niet de bedoeling. Heb geen idee hoe ik dit kan fixen :S
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.