Misieksc
(Misieksc)
26 Grudzień 2013 22:27
#1
Witam mam takie pytanie posiadam plik txt gdzie są zapisywane dane w strukturze:
20:22 temp=48.2'C
20:23 temp=47.6'C
20:24 temp=48.2'C
20:25 temp=48.2'C
20:26 temp=47.6'C
20:27 temp=48.2'C
20:28 temp=48.2'C
20:29 temp=47.6'C
i w jaki sposób zrobić aby z kazdego wiersza odczytywać np godzine 20:22 albo samą temperature 48.2 ? a reszta znaków pominąć ?
obecnie odczytuje całe wiersze za pomocą kodu:
if(!$fd = fopen('2013_12_26.txt', 'r')){
echo "Nie mogę otworzyc pliku";
}
else{
while(!feof($fd)){
$str = fgets($fd, 8);
echo nl2br($str);
}
fclose($fd);
}
Tajgeer
(Tajgeer)
26 Grudzień 2013 22:30
#2
Zainteresuj się wyrażeniami regularnymi [funkcja pregmatch()] lub ewentualnie skorzystaj z funkcji explode().
177
(Copycona)
26 Grudzień 2013 22:50
#3
Użyteczne funkcje: fscanf , sscanf .
Prezentacja dla Twojego problemu:
<?php
$hi = fopen('php://stdin', "r");
$timeH = 0;
$timeM = 0;
$tempC = 0;
while (fscanf($hi, "%d:%d temp=%f'C", $timeH, $timeM, $tempC) == 3) {
echo $timeH, ':', $timeM, ' ', $tempC, "\n";
}
fclose($hi);
stdin:
stdout:
Misieksc
(Misieksc)
26 Grudzień 2013 23:29
#4
spoko wielkie dzięki za naprowadzenie i podpowiedzi ale w między czasie znalazłem jeszcze jedno rozwiązanie :)
<?php
if(!$fd = fopen('2013_12_26.txt', 'r')){
echo "Nie mogę otworzyc pliku";
}
else{
while(!feof($fd)){
$str = fgets($fd);
$godz = substr($str, 0, -14);
$temp = substr($str, 11, -4);
echo $godz." ".$temp."<br>";
}
fclose($fd);
}
?>
177
(Copycona)
26 Grudzień 2013 23:45
#5
Do użycia substr() musisz być pewny, że temperatura będzie zawsze zajmowała 4 znaki, a godzina 5. Godzina przez 10 musi być z zerem wiodącym (09:00, nie 9:00). To samo z temperaturą - przedział [10,99] (lub [0, 99] z zerem wiodącym) z dokładnością co do jednego miejsca po przecinku (40.0, nie 40; 09.1, nie 09.13 itp).