Scheiden van een file
ik heb een log file die ieder 5min verandert
sensor0,23:30:08,2008-05-23,14.56
sensor1,23:30:13,2008-05-23,20.50
May 23 23:30:14 Sensor 2 #0 3316
May 23 23:30:14 Sensor 2 #1 7498
Het ongelukkige is dat de 1ste 2 regels komma's bevatten en regels 3 en 4 dus niet
Hoekan ik nu de regels scheiden
($data = fgetcsv ($handle, ","))
kan hier nog wat achter zodat spaties ook gescheiden worden?
Bedankt alvast
Code (php)
Snappie?
Voor het scheiden van de regels kan je ook kijken of je op \n kan exploden.
@Kasper: in dat geval zou ik file() gebruiken om de inhoud van de logfile uit te lezen. Dan komt elke regel direct al onder een nieuwe index in de betreffende array...
Nu moet ik ook eerlijk zeggen dat ik een beginnenling ben maar goed.
ik had dit
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
<?php
include("connect.php");
error_reporting (E_ALL);
shell_exec('rm /opt/var/log/temperature');
shell_exec('digitemp_DS2490 -i -a -r 5000 -o "sensor%s,%H:%M:%S,%Y-%m-%d,%.2C" -l /opt/var/log/temperature');
$openfile = "/opt/var/log/temperature1";
$row = 0;
$handle = fopen ($openfile,"r");
while ($data = fgetcsv ($handle, 1000, ","))
{
if($row == '0')
{
$num = count ($data);
echo "$num velden in lijn nummer $row: \n";
echo "Dit hoort thuis in TABLE 1 \n\n";
for ($c=0; $c < $num; $c++)
{
echo $data[$c] . "\n";
}
$write = mysql_query("INSERT INTO $data[0] (tijd, datum, temp) VALUES('$data[1]', '$data[2]', '$data[3]')");
if (!$write)
{
die ('Kan niet in digitemp schrijven : ' . mysql_error());
}
$row = '1';
}
else
{
$num = count ($data);
echo "$num velden in lijn nummer $row: \n";
$row++;
echo "Dit hoort thuis in TABLE 2\n\n";
for ($c=0; $c < $num; $c++)
{
print $data[$c] . "\n";
}
$write = mysql_query("INSERT INTO $data[0] (tijd, datum, temp) VALUES('$data[1]', '$data[2]', '$data[3]')");
if (!$write)
{
die ('Kan niet in digitemp schrijven : ' . mysql_error());
}
}
}
fclose ($handle);
mysql_close($link);
?>
include("connect.php");
error_reporting (E_ALL);
shell_exec('rm /opt/var/log/temperature');
shell_exec('digitemp_DS2490 -i -a -r 5000 -o "sensor%s,%H:%M:%S,%Y-%m-%d,%.2C" -l /opt/var/log/temperature');
$openfile = "/opt/var/log/temperature1";
$row = 0;
$handle = fopen ($openfile,"r");
while ($data = fgetcsv ($handle, 1000, ","))
{
if($row == '0')
{
$num = count ($data);
echo "$num velden in lijn nummer $row: \n";
echo "Dit hoort thuis in TABLE 1 \n\n";
for ($c=0; $c < $num; $c++)
{
echo $data[$c] . "\n";
}
$write = mysql_query("INSERT INTO $data[0] (tijd, datum, temp) VALUES('$data[1]', '$data[2]', '$data[3]')");
if (!$write)
{
die ('Kan niet in digitemp schrijven : ' . mysql_error());
}
$row = '1';
}
else
{
$num = count ($data);
echo "$num velden in lijn nummer $row: \n";
$row++;
echo "Dit hoort thuis in TABLE 2\n\n";
for ($c=0; $c < $num; $c++)
{
print $data[$c] . "\n";
}
$write = mysql_query("INSERT INTO $data[0] (tijd, datum, temp) VALUES('$data[1]', '$data[2]', '$data[3]')");
if (!$write)
{
die ('Kan niet in digitemp schrijven : ' . mysql_error());
}
}
}
fclose ($handle);
mysql_close($link);
?>
Dit werkte perfect
kreeg dit als output
4 velden in lijn nummer 0:
Dit hoort thuis in TABLE 1
sensor0
00:09:10
2008-05-25
17.50
4 velden in lijn nummer 1:
Dit hoort thuis in TABLE 2
sensor1
00:09:15
2008-05-25
21.63
Maar goed nu heb ik dus die teller erbij en nou gaat het voor me fout
Krijg dus nu dit:
4 velden in lijn nummer 0:
Dit hoort thuis in TABLE 1
sensor0
00:09:10
2008-05-25
17.50
4 velden in lijn nummer 1:
Dit hoort thuis in TABLE 2
sensor1
00:09:15
2008-05-25
21.63
1 velden in lijn nummer 2:
Dit hoort thuis in TABLE 2
May 25 00:09:16 Sensor 2 #0 3352
1 velden in lijn nummer 3:
Dit hoort thuis in TABLE 2
May 25 00:09:16 Sensor 2 #1 16605
Zoals jullie zien het onderste gedeelte wordt niet opgesplitst en kent het toe aan table 2
Is mijn script totaal verkeerd?
Zo ja help me out
Zo niet kan iemand het voor mij aanvullen?
Mijn dank zal zeer groot zijn ;-)
Gewijzigd op 01/01/1970 01:00:00 door stefan srepmek