Ik krijg iets maar niet in orde...
Situatieschets: Ik heb een bestand dat geëxporteerd is uit een website. Het is een txt met tabs gescheiden waarden. Ik krijg alles mooi op het scherm, moest het niet zijn dat er speciale gevallen in zitten.
In de eerste kolom staat altijd één van de volgende 3 waarden 1, 2 of 99
1 = nieuwe regel met gegevens
2 = update van kolom 9, "prijs" uit vorige regel
99 = einde van bestand
Wat doe ik?
Nu test ik of het eerste teken een 1, 2 of 99 is, en voer aan de hand daarvan een aantal regels code uit.
1: eenvoudig: insert-query maken. Dat werkt goed.
2: ik krijg die waarde uit die rij, kolom 9 maar niet geselecteerd...
99: nog eenvoudiger, moet ik zelfs geen rekening mee houden, negeer het volgende
Wat probeerde ik al?
Hieronder het bestand en de code die ik maakte.
(Ik ben geen pro, dus let niet op de dingen die nog korter konden
Hier en daar staat ook een echo, en commentaar om te debuggen en te testen... maar zonder succes)
Wat doet hij dan wel? Hij neemt de waarde van de vorige rij mee, dus waar die 1 staat, in feite...
Welke richting moet ik uit zoeken?
PHP-Code
(Deeltje van) het bestand:
Situatieschets: Ik heb een bestand dat geëxporteerd is uit een website. Het is een txt met tabs gescheiden waarden. Ik krijg alles mooi op het scherm, moest het niet zijn dat er speciale gevallen in zitten.
In de eerste kolom staat altijd één van de volgende 3 waarden 1, 2 of 99
1 = nieuwe regel met gegevens
2 = update van kolom 9, "prijs" uit vorige regel
99 = einde van bestand
Wat doe ik?
Nu test ik of het eerste teken een 1, 2 of 99 is, en voer aan de hand daarvan een aantal regels code uit.
1: eenvoudig: insert-query maken. Dat werkt goed.
2: ik krijg die waarde uit die rij, kolom 9 maar niet geselecteerd...
99: nog eenvoudiger, moet ik zelfs geen rekening mee houden, negeer het volgende
Wat probeerde ik al?
Hieronder het bestand en de code die ik maakte.
(Ik ben geen pro, dus let niet op de dingen die nog korter konden
Wat doet hij dan wel? Hij neemt de waarde van de vorige rij mee, dus waar die 1 staat, in feite...
Welke richting moet ik uit zoeken?
PHP-Code
code:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
| $fileHandle= @fopen($file, "r");
if ($fileHandle)
{
while (!feof($fileHandle))
{
$ok=0;
$querystart=""; $waarden=""; $queryend="";
$i++;
$lines = fgets($fileHandle);
$regels = str_replace(chr(9),"@@",$lines);
$columns = explode('@@', $regels);
$aantalkolommen = count($columns);
$t = 0;
$skiprest = 0;
for ($t = 0; $t <= $aantalkolommen; $t++)
{
$kolommen[$t] = str_replace('@@','',$columns[$t]);
if($t == 0) //kolom 1 is code
{
$inhoudkolom = $kolommen[$t];
echo "inhoudkolom : $inhoudkolom <br>";
switch($inhoudkolom)
{//1 = nieuw, 2 = update prijs, 99 = einde
case '1':
//toevoegen
$querystart = "INSERT INTO proaccartikelen VALUES(";
$querend = ")";
$type = "insert";
echo "in insert <br>";
break;
case '2':
//update prijs
$sql = "SELECT * FROM proaccartikelen DESC Limit 1";
$r = mysql_query($sql);
while($d = mysql_fetch_array($r))
{
$artcode = $d['artikelcode'];
}
$querystart = "UPDATE proaccartikelen SET bedrag = '$kolommen[9]'";
$queryend = " WHERE artikelcode = '$artcode'";
$skiprest = "1";
//$type = "update";
echo "in update<br>";
break;
case '99':
echo '<br/>einde<br/>';
$skiprest == 1;
break;
default:
break;
}
}
else
{
if($type == "insert") $waarden .= "'".$kolommen[$t]."', ";
//if($type == "update") $waarden .= "'".$kolommen[9]."'";
if($skiprest == "1") $t = 5000;
}
}
if($type == "insert") {$waarden = substr_replace($waarden ,"",-2); $waarden .= ")"; }
echo "Volledige query: ".$querystart.$waarden.$queryend;
echo '<br>';
}
fclose($fileHandle);
} |
(Deeltje van) het bestand:
code:
1
2
3
4
5
6
| 1 740010 BIJDRAGESECUNDA Bijdrage scholengemeenschap 740010 0 0 0,8000 EUR 0 EUR 0,00 1 0 0 0 0 0 0 0 0 0 0 24/02/2011 23 JUN 11 09:50:12 0 0 0 0 0 09/03/2012 2 0 0 5,0000 EUR 0 0,00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 460300 CONCLAAFSG CONCLAAF SG 460300 0 21 0,7000 EUR 0 EUR 0,00 1 0 0 0 0 0 0 0 0 0 0 02/05/2011 2 MAY 11 09:42:30 0 0 0 0 0 30/04/2011 2 0 0 419,0000 EUR 0 0,00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 460700 NASCHOLINGVSKOV Nascholing VSKO: 'Voor een goed begrip' Taal beschouwen, hoe dan? (A-stroom) 460700 0 0 0,0000 EUR 0 EUR 0,00 1 0 0 0 0 0 0 0 0 0 0 05/05/2011 5 MAY 11 08:57:48 0 0 0 0 0 15/02/2012 2 0 0 7,6900 EUR 0 0,00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |