Lezen + schrijven van CSV
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)
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
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);
?>
$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.
Code (php)
1
2
3
4
5
6
7
8
9
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);
?>
$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?
Erik Rijk op 06/07/2010 10:09:11:
Ik doe het zelf op de volgende manier:
Misschien dat je hier wat aan hebt?
Code (php)
1
2
3
4
5
6
7
8
9
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);
?>
$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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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);
}
?>
$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