Avatar billede sazo Nybegynder
15. august 2008 - 15:15 Der er 14 kommentarer og
4 løsninger

Tælle kommaer

Hey Eksperter

Jeg skal bruge en php-fil der kan åbne en .CSV fil og tælle hvor mange kommaer der er skrevet i filen alt i alt. Samtidig skal der trækkes et tal fra dette antal kommmaer (Tallet kan varierer, så det skal nemt kunne findes i php-filen og udskiftes). Det totale antal kommaer minus tallet skal herefter sendes til "$antal".

//Sazo
Avatar billede w13 Novice
15. august 2008 - 15:23 #1
Noget i denne stil?

$minus = 5;
$file = "testFile.txt";

$antal = fread(fopen($myFile,"r"),filesize($myFile));
$antal = count(explode(" ",$antal));
$antal = $antal - $minus;
Avatar billede showsource Seniormester
15. august 2008 - 15:30 #2
eller

<?php

$minus = 3;
$fil = "kommaer.txt";

$str = file_get_contents($fil);
$kommaer = preg_match_all("/,/",$str,$komma);
echo "Ialt: ".(count($komma[0])-$minus);

?>
Avatar billede showsource Seniormester
15. august 2008 - 15:31 #3
$kommaer = preg_match_all("/,/",$str,$komma);
skal blot være
preg_match_all("/,/",$str,$komma);
Avatar billede sazo Nybegynder
15. august 2008 - 15:43 #4
Jepper. Det skal bare være en CSV fil den åbner, ikke en txt fil. :)
Avatar billede sazo Nybegynder
15. august 2008 - 15:46 #5
Den første der er skrevet er tættest på det jeg leder efter, men kan ikke få den til at virker med CSV filen som jeg bruger. :)
Avatar billede tmi Nybegynder
15. august 2008 - 15:54 #6
$x = 4; // det antal der skal trækkes fra
$antal = substr_count(file_get_contents("fil.csv"), ",")-$x;
Avatar billede showsource Seniormester
15. august 2008 - 15:55 #7
I begge ex. ændrer du blot værdien for henholdsvis $file og $fil
Og i begge skal filen ligge i samme dir som scriptet.

Og i mit ex. kan du udskifte
echo "Ialt: ".(count($komma[0])-$minus);
med
$antal = (count($komma[0])-$minus);
Avatar billede sazo Nybegynder
15. august 2008 - 16:09 #8
showsource: Hvis du sender det som svar, får du pointene, kunne kun få det til at virke med din fil. :)
Avatar billede tmi Nybegynder
15. august 2008 - 16:16 #9
showsource må gerne få pointsne, men jeg synes du skal bruge funktionen substr_count, som jeg skrev, da funktionen er der netop af den grund. preg_match_all har iøvrigt et argument mere der hedder &$count hvor antallet af resultater er gemt i, så er du fri for at tælle arrayet med resultaterne. Rimelig resursespild løsning
Avatar billede showsource Seniormester
16. august 2008 - 08:03 #10
VIl nu mene alle tre ex. vil virke.

Den med &$count, hvordan det ?
Jeg er ikke vant til at "rode" med "preg...", altså der er en fandes masse jeg ikke ved!

Men det jeg så har fusket mig frem til:

<?php

$minus = 3;
$fil = "kommaer.txt";

$str = file_get_contents($fil);
$antal = preg_match_all("/,/",$str,$komma);
echo "Ialt: ".($antal-$minus);

?>

Men jeg synes det er på en deler her, og 200 point er nok også lige rigeligt nok :O)
Avatar billede sazo Nybegynder
16. august 2008 - 09:16 #11
Så må i alle tre komme med et svar, så vil jeg dele pointene. :) 200 point er fint, giver jeg altid da det giver hurtigere svar fra folk - hvilket jeg gerne vil belønne. :)
Avatar billede w13 Novice
16. august 2008 - 10:07 #12
:)
Avatar billede tmi Nybegynder
16. august 2008 - 10:12 #13
Nr. 1 vil ikke virke, da den tæller antallet af mellemrum+1. Dette kunne evt. ændres til:
<?
$minus = 5;
$file = "testFile.txt";

$antal = fread(fopen($myFile,"r"),filesize($myFile));
$antal = count(explode(",",$antal));
$antal = $antal - 1 - $minus;
?>

preg_match_all har ikke count-argument alligevel, det er preg_replace, der har det. Min fejl ;-) preg_match_all returnerer antallet af matches, som du har fukset dig korrekt frem til ;-)
Avatar billede showsource Seniormester
16. august 2008 - 10:43 #14
jeg havde slet ikke set mellemrum i første. ex !
Avatar billede w13 Novice
16. august 2008 - 16:04 #15
Tak for point! :)
Avatar billede olebole Juniormester
17. august 2008 - 00:55 #16
<ole>

tmi >> Hvis du insisterer på ikke at bruge file_get_contents, bør du lukke pointeren igen:

<?
$minus = 5;
$file = "testFile.txt";
$fp = fopen($myFile,"r");
$antal = fread($fp,filesize($myFile));
fclose($fp);
$antal = count(explode(",",$antal));
$antal = $antal - 1 - $minus;
?>


/mvh
</bole>
Avatar billede tmi Nybegynder
17. august 2008 - 04:11 #17
Hej Ole, jeg insisterer netop på at bruge file_get_contents, pointen var at jeg havde tilføjet -1 og rettet mellemrum til komma i w13's eksempel. Se min løsning højere oppe.
Avatar billede tmi Nybegynder
17. august 2008 - 06:23 #18
Hej igen Ole, jeg skulle hilse fra Frø og sige at du skal tjekke din gmail ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester