Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

csv file uitlezen php

Pagina: 1
Acties:

  • frenk16
  • Registratie: Januari 2012
  • Laatst online: 10-11 19:37
Hallo,

Aangezien de rooster website van onze school ronduit slecht is was ik van plan om een website te maken die speciaal gericht is op mobieltjes. Ik ben al een tijdje bezig met dit project alleen het wil nog niet helemaal lukken. Elke dag (maandag, dinsdag enz..) moet een eigen pagina krijgen.

De rooster zijn html bestanden. Eerst was het plan om deze pagina's uit te lezen en dan een mooie pagina maken waar je per dag je rooster kon zien. Echter was dit haast niet te doen aangezien de html van deze rooster brak is. Sinds zijn ze de rooster gaan exporteren naar een csv bestand. Dit zou veel makkelijker zijn maar het wil mij zelf nog niet lukken.

In het csv bestand staat alle informatie. Een les is een rij. Een rij ziet er zo uit: id, klas, leraar, vak , dag, uur, profiel. Stel dat ik bijvoorbeeld alles lessen van klas 3a op maandag wil dan moet ik zoeken naar de rijen waar klas = 3a en dag = 1 (ma =1, di =2 enz). Dan moet ik nog zorgen dat alle rijen op volgorde staan zodat het eerste uur bovenaan komt.

Op dit moment heb ik het volgende:
PHP:
1
2
3
4
5
6
7
8
$file  = fopen('basis.csv', 'r');

while (($line = fgetcsv($file)) !== FALSE) {  
    list($nummer, $klas, $leraar, $vak, $lokaal, $dag, $uur, $profiel) = $line;

           if(preg_match('3a', $klas) && preg_match('1', $dag)) {
                echo "$nummer, $klas, $leraar, $vak, $lokaal, $dag, $uur, $profiel";
}


Ik krijg nu wel alle lessen te zien van klas 3a maar deze staan nog niet op volgorde, hoe kan ik dit het beste doen? Als ik voor elk een een if doe dan komt het nog niet op volgorde te staan.

Wie kan mij helpen? Ook als het veel slimmer, makkelijker, beter of efficiënter kan dan zou ik het waarderen als je me zou willen helpen

Met vriendelijke groet,
Frank

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 01-11 21:54
Leuk idee :) , ik zou beginnen met het bekijken van de mogelijkheden van http://php.net/manual/en/function.fgetcsv.php

edit:
ik las veeeel te snel 8)7

[ Voor 21% gewijzigd door C0rnelis op 05-10-2012 22:20 ]


  • Rushleader
  • Registratie: November 2011
  • Laatst online: 19-07 11:06
Wat is die nummer var? Misschien dat je die kan gebruiken in sort functie ?

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Natuurlijk staat 't niet zomaar op volgorde. Je leest en output 't immers op de volgorde van basis.csv. Dus als die niet op volgorde staat, dan is je output dat ook niet 8)7

Waarom niet je data eerst parsen in de richting van bijvoorbeeld een array?

Oh en hoezo een preg_match? Ik zie nergens een regular expression terugkomen in de functie.. :?

[ Voor 16% gewijzigd door Osiris op 05-10-2012 22:25 ]


  • Baggeraar
  • Registratie: Oktober 2009
  • Laatst online: 18-11 23:00

Baggeraar

Wat een gebagger..

Stop alle data in een Array als die geen vele megabytes groot is, maar dat verwacht ik niet.

Daarna kan je gewoon de array sorteren met de verschillende Array.sort functies in php: http://php.net/manual/en/array.sorting.php

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Osiris schreef op vrijdag 05 oktober 2012 @ 22:24:
Waarom niet je data eerst parsen in de richting van bijvoorbeeld een array?
Of waarom niet parsen en cachen in de richting van bijv een db (sql lite?)

En dan als vervolgstap het hele inlezen ontkoppelen van het tonen dan kan je de pagina ook nog eens aan meerdere klasgenoten geven zonder dat gelijk de school 10.000 csv-requests per seconde krijgt.

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Gomez12 schreef op vrijdag 05 oktober 2012 @ 22:29:
[...]

Of waarom niet parsen en cachen in de richting van bijv een db (sql lite?)

En dan als vervolgstap het hele inlezen ontkoppelen van het tonen dan kan je de pagina ook nog eens aan meerdere klasgenoten geven zonder dat gelijk de school 10.000 csv-requests per seconde krijgt.
Uiteraard, da's wel zo netjes. Maar misschien wat te hoog gegrepen voor de TS. Babystapjes enzo :P

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 01-11 21:54
Osiris schreef op vrijdag 05 oktober 2012 @ 22:32:
[...]

Uiteraard, da's wel zo netjes. Maar misschien wat te hoog gegrepen voor de TS. Babystapjes enzo :P
Als het niet wordt opgeslagen in een database heb je volgens mij snel even deze mogelijkheden:

• Je bouwt voor elke request een volledige zoek-/(op jouw criteria)selecteerbare array
• Je slaat informatie die je hebt geparsed op in een nieuw bestand per dag per klas
• Je parsed het csv elke request en bij het lezen van de regel controleer je of die aan je criteria voldoet en onthoud je die ene regel

[ Voor 12% gewijzigd door C0rnelis op 05-10-2012 22:39 ]


  • frenk16
  • Registratie: Januari 2012
  • Laatst online: 10-11 19:37
Alles in een database gooien kan inderdaad ook en lijkt mijzelf ook veel makkelijker. Ik ga er morgen even naar kijken.

Bedankt!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 11:42

MueR

Admin Devschuur® & Discord

is niet lief

Anyone who gets in between me and my morning coffee should be insecure.


  • frenk16
  • Registratie: Januari 2012
  • Laatst online: 10-11 19:37
Het probleem is opgelost. Ik heb mijn csv file in een mysql database gezet daardoor is het tien keer makkelijker geworden om de juiste gegevens te krijgen.

Bedankt!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
frenk16 schreef op maandag 08 oktober 2012 @ 09:43:
Het probleem is opgelost. Ik heb mijn csv file in een mysql database gezet daardoor is het tien keer makkelijker geworden om de juiste gegevens te krijgen.
Pas wel ff op dat als je meerdere malen gegevens inleest deze niet dubbel in je database komen te staan. Beginnersfout de we allemaal wel eens gemaakt hebben. Hopelijk staat er genoeg info in die CSVs om een unieke rij te kunnen identificeren en met een unique constraint in je database kan je voorkomen dat er rijen dubbel geinsert kunnen worden.

https://niels.nu


  • frenk16
  • Registratie: Januari 2012
  • Laatst online: 10-11 19:37
Er zijn geen rijen dubbel geinsert dus dat zit wel goed. Nu weer twee uitdagingen. Hoe ga ik blokuren mooi weergeven en hoe ga ik het doen met individuele roosters. Komt wel goed denk ik. Helaas volgende week SE week dus aankomende week niet echt veel tijd :(

  • _Piwi_
  • Registratie: December 2008
  • Laatst online: 21-11 23:44
Tijdens het parsen kan je kijken wat de vorige / volgende 'les' is. Is dit hetzelfde dan update je de rij i.p.v. een insert en doe je bijvoorbeeld + 1 uur (ik weet niet hoe jij het opslaat).
Betreft individuele roosters: Extra tabel maken die een individu koppelt aan een vak. Dat vak haal je weer uit de tabel waarin je standaardroosters staan.

Succes ermee :)

  • frenk16
  • Registratie: Januari 2012
  • Laatst online: 10-11 19:37
Bij individuele roosters moet ik eerst kijken naar het basisrooster van de desbetreffende klas. Als er op een uur drie lessen staan gepland dan moet ik in een andere tabel zoeken welke goed is. De andere tabel bevat leerlingnummers en hun keuzevakken maar zoals ik al zei. Ik moet er eerst even zelf goed naar kijken.

[ Voor 11% gewijzigd door frenk16 op 09-10-2012 20:03 ]

Pagina: 1