Ik probeer zelf csv bestand om te zetten naar een array; wat me normaliter prima lukt.
Echter heeft mijn bronbestand niet echt eenduidige regel einden, als ik het bestand open in notepad++ en de verborgen tekens aanzet ziet het er als volgt uit:
regel;eenLF
regel;tweeLF
regel;drieCR
regel;vierCR
Ik lees het bestand uit met onderstaande script:
De regels die netjes op een LF code eindigen worden goed verwerkt, maar de regels die eindigen op CR niet.Code:if (($handle = fopen("$bestand", "r")) !== FALSE) { while (($data = fgetcsv($handle, 20000, ";")) !== FALSE) { print_r($data); } }
ik krijg dus onderstaande waarden in mijn array:
array[0]=>regel [1]=>een
array[0]=>regel [1]=>twee
array[0]=>regel [1]=>drie [2]=>regel [4]=> vier
De functie fgetcsv kijkt dus alleen naar LF als regel eindes en niet naar CR.
Weet iemand hier een oplossing voor?
- [PHP] CSV bestand naar array met verschillende line breaks?
-
18-10-2011, 14:39 #1
- Berichten
- 506
- Lid sinds
- 16 Jaar
[PHP] CSV bestand naar array met verschillende line breaks?
-
-
18-10-2011, 15:01 #2
- Berichten
- 554
- Lid sinds
- 15 Jaar
Re: [PHP] CSV bestand naar array met verschillende line breaks?
De CR staat voor "carriage return". Problemen met LF/CR zijn helaas veel voorkomend. De CR stamt nog uit het tijdperk van type machines en zou wat mij betreft gedumpt moeten worden.
fgetcsv ziet LF waarschijnlijk als het newline symbool en dus niet CR.
Een oplossing zou zijn om alle CR in het bestand te vervangen door LF.
Bijvoorbeeld via een str_replace("\r",'\n",$string);
Je moet dan wel eerst alle data inlezen in een string, of met chuncks gaan werken.
-
18-10-2011, 15:04 #3
- Berichten
- 506
- Lid sinds
- 16 Jaar
Re: [PHP] CSV bestand naar array met verschillende line breaks?
De CR staat voor "carriage return". Problemen met LF/CR zijn helaas veel voorkomend. De CR stamt nog uit het tijdperk van type machines en zou wat mij betreft gedumpt moeten worden.
fgetcsv ziet LF waarschijnlijk als het newline symbool en dus niet CR.
Een oplossing zou zijn om alle CR in het bestand te vervangen door LF.
Bijvoorbeeld via een str_replace("\r",'\n",$string);
Je moet dan wel eerst alle data inlezen in een string, of met chuncks gaan werken.
Daar ben ik nu inderdaad mee aan het stoeien, maar hoe krijg ik de inhoud van mijn $handle in een "normale" var? zodat ik er een str_replace op toe kan passen; dit wil me tot op heden namelijk nog niet echt lukken.
Aanvullend bericht:
Ik heb inmiddels een oplossing, weliswaar een knutsel oplossing, maar daar kom ik niet aan onderuit vrees ik.
Ik maak nu gebruik van fgets ipv fgetcsv, hier laat ik wat explodes en str_replaces op los en dit geeft het gewenste resultaat.Laatst aangepast door Michel Willemse : 19-10-2011 om 13:43 Reden: Automatisch samengevoegd.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic