= fgets() vervangbaar?
Ik ben sinds deze middag de file() en andere functies aan het bestuderen.
Ik heb een .txt bestandje en tot nu toe kan ik er 3eerste regels ophalen. Andere regels gaan natuurlijk ook, maar als ik heel de tijd fgets() moet gebruiken dan wordt het op een duur gekkenwerk, zeker als je 100+ regels hebt en er verschillende bestandjes behandeld moeten worden.
Even laten zien wat ik al heb:
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
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
<?php
$filename = "test.txt";
$fd = fopen($filename, 'r');
$message = fgets($fd, 25);
$message3 = fgets($fd, 2);
$message4 = fgets($fd, 35);
fclose($fd);
echo"<b>(Text in '$filename' at 3 first lines)</b><br>";
echo"$message<br>";
echo"<br>"; // 3de regel = een witregel
echo"$message4<br><br>";
$message2 = eregi_replace(">>> Map: ","",$message);
$message2 = trim($message2);
$message5 = eregi_replace("Overall stats for: ","",$message4);
$message5 = trim($message5);
echo"<b>(Text saved into the database)</b><br>"; // ik ga de sql ertussen zetten pas als ik de file() onder de knie krijg
echo"$message2<br>";
echo"$message5<br>";
?>
$filename = "test.txt";
$fd = fopen($filename, 'r');
$message = fgets($fd, 25);
$message3 = fgets($fd, 2);
$message4 = fgets($fd, 35);
fclose($fd);
echo"<b>(Text in '$filename' at 3 first lines)</b><br>";
echo"$message<br>";
echo"<br>"; // 3de regel = een witregel
echo"$message4<br><br>";
$message2 = eregi_replace(">>> Map: ","",$message);
$message2 = trim($message2);
$message5 = eregi_replace("Overall stats for: ","",$message4);
$message5 = trim($message5);
echo"<b>(Text saved into the database)</b><br>"; // ik ga de sql ertussen zetten pas als ik de file() onder de knie krijg
echo"$message2<br>";
echo"$message5<br>";
?>
je kunt de resultaat hier zien:
http://bl00d.eu/statistics/test.php
Ik ben al tevreden als iemand me op weg kan helpen door de juiste functie te noemen, dan ga ik er wel zelf op zoek hoe de rest in elkaar zit =)
Alvast bedankt,
Ed
Gewijzigd op 01/01/1970 01:00:00 door Eduard
file_get_contents(). Hiermee laad je de complete inhoud van een bestand als string in een variabele.
Als alternatief kun je file() gebruiken om het bestand per regel in een array in te lezen...
Nog makkelijker: Als alternatief kun je file() gebruiken om het bestand per regel in een array in te lezen...
Aanvulling op Blanche: bij deze functies hoef je fopen() enz. niet te gebruiken.
goede weekend!
is het mogelijk om van regel X enkel de woorden vanaf de i-de tot en met de j-de teken weer te geven?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$teken1 = "teken1";
$teken2 = "teken2";
$tekst = file_get_contents("file.txt");
$woorden = preg_replace("#(.*?)".$teken1."(.*?)".$teken2."(.*?)#si", "$2", $tekst);
?>
$teken1 = "teken1";
$teken2 = "teken2";
$tekst = file_get_contents("file.txt");
$woorden = preg_replace("#(.*?)".$teken1."(.*?)".$teken2."(.*?)#si", "$2", $tekst);
?>
Als het goed is zit nu in $woorden alle woorden tussen $teken1 en $teken2. Ik weet dit echter niet zeker, heb het script niet getest.
Quote:
Klinkt mij in de oren als aantallen, dus dan zou je ook met substr() aan de slag kunnen...vanaf de i-de tot en met de j-de
@Blanche: tsja, ik wist niet wat ik onder 'teken' moest verstaan, dus heb een algemene oplossing gegeven ; ).
perfect, nu kan ik het wel verder alleen afwerken, bedankt allemaal =)
Dan, als ik dat woord gewoon in een variabele zet, kan ik dan met count() zien hoeveel keer het in het bestand voorkomt? Het bestand is nu bij mij regel per regel in een array opgeslagen.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$woord="Axis";
for($i=0;$i<51;$i++){
$count += substr_count($lines[$i],$woord);
}
echo$count; // thnx SanThe
?>
$woord="Axis";
for($i=0;$i<51;$i++){
$count += substr_count($lines[$i],$woord);
}
echo$count; // thnx SanThe
?>
EDIT: als ik bijvoorbeeld naar 2 verschillende woorden wil zoeken, moet ik dan 2 aparte for loops gebruiken of kan het ook in 1? en wat is beter.
En nog iets, kan ik met strpos() te weten komen op welke regel dat woord (voor het eerst) voorkomt? Of is er een betere functie ervoor?
Gewijzigd op 01/01/1970 01:00:00 door Eduard
Note: Vars buiten quotes houden.
Geen echo"$count";
Maar echo$count;
Edit: Typo.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
count !=0 en < 2, dus moet 1 zijn, dus $i = de regel waar het woord voor het eerst voorkomt, kwou even vragen of ik goed bezig was en of dat ik er in de toekomst geen problemen zou krijgen
btw, waar kan ik een definitie van 'vars' vinden?
alvast bedankt
Gewijzigd op 01/01/1970 01:00:00 door Eduard
check php.net en een var is iets met een $ ervoor.
Miniejjj schreef op 08.03.2008 14:58:
Zoiezo houdt je je niet aan wat SanThe hierboven zei:
vandaar dat ik naar een def van vars gevraagd heb, kon ik toch niet weten dat het een afkorting voor een variabele was
Gewijzigd op 01/01/1970 01:00:00 door Eduard
Hoe kan ik dan het best te werk gaan als ik weet dat de regels die ik nodig heb telkens met 1 welbepaalde woord beginnen?
In PHP zou dat er bijvoorbeeld zo uitzien:
Code (php)
Nu houd je dus een array $aResults over met de 100 regels waar jij naar op zoek bent.
Als ik die 2 waarden, links en rechts van dat woord, wil terugkrijgen en ik wil weten of het nu links of rechts van dat scheidingswoord was [opdat ik nadien de frequentie van alle unieke waarden links en rechts (2 aparte getallen per unieke waarde) zou weten], moet ik dan een string_split() gebruiken? en zal ik dan nog wel de rest van mijn wensen kunnen scripten?