[PHP] waarde uit CSV icm Alt+Enter

Pagina: 1
Acties:
  • 328 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Zoals al in de titel staat werk ik met CSV bestanden.
Nu komt het regelmatig voor dat men gebruik maakt van Alt+Enter in een veld in Excel
Zie hieronder het gebruik ervan:

Anyway zodra ik mbv PHP de waarden wil uitlezen dat gaat het enigzins fout.

Ben niet thuis dus heb even geen voorbeeld code maar dat is niet nodig denk ik aangezien ik het als volgt probeer duidelijk te maken:

elke regel wordt gelezen dmv een for each
Won wordt van elke regel alle waarden opgenomen en opgeslagen in een object
vervolgens worden er een heleboel acties gedaan die nu even niet relevant zijn

Maar het moment van het ophalen van de data gaat het fout
klein stukje code
Afbeeldingslocatie: http://home.aim.avans.nl/aaloon/tweakers/altenter.jpg
PHP:
4
5
6
7
8
9
for each($rule as $temp)
{
//...
$object->setOpmerking($temp[1]);
//...
}

in dit geval bevat bijvoorbeeld deze temp(5) de waarde uit het plaatje hierboven
maar hij neemt dan niet alles mee maar alleen het regel1
vervolgens gaat hij gekke dingen doen en klopt er geen hout meer van.

wat gaat er four of mis ik de functies als special chars oid? Maar zover ik weet lukt het niet met die funtie om die tekens als alt+enter te lezen
Ik denk dat dit ook gerelateerd kan worden met <br> oid en dus zal ik een methode/functie moeten gebruiken die hiermee overweg kan.

Kan er nu helaas niet aan werken, want ben op ander werk, maar heb al wel gezocht naar die functies maar kon niet echt duidelijk eruit halen welke hiermee overweg kunnen
Zou kunnen dat ik iets over het hoofd heb gezien...

Alvast bedankt?

zal waarschijnlijk wel een simpel iets zijn :P

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • ReLexEd
  • Registratie: Juli 2000
  • Laatst online: 18-08 10:09

ReLexEd

2 ReLexEd or not 2 ReLexEd???

Al geprobeerd of het niet een gewone lineend is?
Dan zou je namelijk met nl2br de 'onzichtbare' line-end zichtbaar kunnen maken door er <br />-tags van te maken....

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 19-09 09:34

thomaske

» » » » » »

Om CSV-bestanden uit te lezen heeft php een speciale functie: fgetcsv() . Ik neem aan dat deze functie de CSV netjes uitleest en de newlines juist interpreteert..

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Het is geen 'alt-enter'. Dat is inderdaad wel de toetscombinatie die je in excel gebruikt, maar in het csv bestand is het gewoon en newline. Dit had je ook kunnen zien door de csv gewoon eens in notpad (oid) te openen ;). Veel simpele csv interpreters gaanhiermee de fout in omdat ze standaard uitgaan van 1 rij per regel. Als je echter kijkt in het bestand dan kun je zien dat het veld omsloten is met quote's. Een fatsoenlijke csv interpreter zal de newlines binnen deze quotes niet als 'rijscheiders', maar als onderdeel van het veld zien.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
thomaske schreef op donderdag 12 april 2007 @ 11:10:
Om CSV-bestanden uit te lezen heeft php een speciale functie: fgetcsv() . Ik neem aan dat deze functie de CSV netjes uitleest en de newlines juist interpreteert..
oei das een goeie stom ddak daar niet zelf op ben gekomen lol

maar hier kwam ik net achter:
regel 1,"regel 2
regel 2",regel 3

ofwel die alt+enter waarden word tussen "" gezet. Nu ik in principe al zelf de applicatie heb gemaakt en redelijk tot bijna af is ga ik niet meteen over op die fgetcsv() functie.
Alleen als het hard nodig zal zijn zal ik eens kijken anders ga ik een hoop aanpaswerk tegemoet :P
Janoz schreef op donderdag 12 april 2007 @ 11:17:
Het is geen 'alt-enter'. Dat is inderdaad wel de toetscombinatie die je in excel gebruikt, maar in het csv bestand is het gewoon en newline. Dit had je ook kunnen zien door de csv gewoon eens in notpad (oid) te openen ;). Veel simpele csv interpreters gaanhiermee de fout in omdat ze standaard uitgaan van 1 rij per regel. Als je echter kijkt in het bestand dan kun je zien dat het veld omsloten is met quote's. Een fatsoenlijke csv interpreter zal de newlines binnen deze quotes niet als 'rijscheiders', maar als onderdeel van het veld zien.
dit dus :P net telaat :)
ik ga er maar even vanuit dat ik in dat geval beter voor die functie kan gaan om verdere problemen te omzijlen.

ff vraagje betreft fgetcsv voorbeeld:
PHP:
1
while ($data = fgetcsv ($fp, 1000, ","))

waar slaat die 1000 op? ofwel wat houd die int length precies in?
De length parameter moet groter zijn dan de langste lijn vindbaar in het CSV bestand.
Dus aantal records/regels neem ik aan.
In mijn geval kan dit ENORM varieren |:( . Is deze niet optioneel ofwel kan ik deze leeg laten?

Anyway bedankt!

ik kan dus even verder knutselen vanavond :)

[ Voor 65% gewijzigd door Tijgertje84 op 12-04-2007 11:23 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Tijgertje84 schreef op donderdag 12 april 2007 @ 11:18:
waar slaat die 1000 op? ofwel wat houd die int length precies in?
De length parameter moet groter zijn dan de langste lijn vindbaar in het CSV bestand.
Dus aantal records/regels neem ik aan.
In mijn geval kan dit ENORM varieren |:( . Is deze niet optioneel ofwel kan ik deze leeg laten?
Wel eens van een handleiding gehoord???
length (Optional)
Must be greater than the longest line (in characters) to be found in the CSV file (allowing for trailing line-end characters). It became optional in PHP 5. Omitting this parameter (or setting it to 0 in PHP 5.0.4 and later) the maximum line length is not limited, which is slightly slower.
Veel duidelijker kan het niet worden vermoed ik........

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Janoz schreef op donderdag 12 april 2007 @ 11:25:
[...]

Wel eens van een handleiding gehoord???


[...]

Veel duidelijker kan het niet worden vermoed ik........
sorry maar ik had de nl versie waar het niet zo uitgebreid bij stond ;)
alleen dit: "De length parameter moet groter zijn dan de langste lijn vindbaar in het CSV bestand."
dus jah vandaar mijn vraag ok ;)
en hoe kom ik anders aan mijn vraag betreft het voorbeeld van de handleiding :)

alleen aangeizen ik geen PHP5 heb zal ik dus verplicht een lengte op moeten geven maar dat is geen probleem

[ Voor 9% gewijzigd door Tijgertje84 op 12-04-2007 11:32 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
nou fgetcsv gaat niet werken bij mij :(
deze functie werkt alleen voor maar 1 regel....
ik maak gebruik van csv bestanden met meerdere records (gemiddled 100)
hoe kan ik dat dan oplossen?
als ik file() gebruik dan gooit hij alles in een array zoals ik wil maar het klopt niet zoals iedereen wel zal begrijpen

ik heb een csv bestand met de onderstaande opmaak in wordpad:
code:
1
2
3
4
5
6
woord;woord;woord;woord;woord;woord;"woord 
woord woord"
woord;woord;woord;woord;woord;woord;"woord 
woord woord"
woord;woord;woord;woord;woord;woord;"woord 
woord woord"


ik wil dus in principe net als dit voorbeeld alle gegevens van elke record in een array krijgen.
met fgetcsv() krijg ik alleen 1 regel ( de bovenste) terug

PHP:
1
2
3
$file = fopen("woord.csv", "r");
$csv = fgetcsv($file,1000,';','"'); //de ';','"' om te zorgen dat hij dan elke waarde van de regel spit etc
info($csv ); // eigen sscriptje voor duidelijker overzicht dan var_dump()

hiermee krijg ik dan
code:
1
2
3
4
5
6
7
8
9
10
11
Array
(
    [0] => woord
    [1] => woord
    [2] => woord
    [3] => woord
    [4] => woord
    [5] => woord
    [6] => woord 
woord woord
)

Maar dit wil in dus niet.
Heb het hele systeem eigenlijk zo gebouw dat hij van de csv ammel records wegzet in de array met de opmaak etc van de csv zelf waarna ik per record ga exploden op ; om zo tijd te verminderen
dit werkt dus met file(), alleen kan hij niet werken met die "alt-enter" ofwel "woord woord woord" gedeelte helaas
PHP:
1
$file = file("woord.csv");

dit maakt hier helaas dit van:
code:
1
2
3
4
5
6
7
8
9
Array
(
    [0] => woord;woord;woord;woord;woord;woord;"woord 
    [1] => woord woord"
    [2] => woord;woord;woord;woord;woord;woord;"woord 
    [3] => woord woord"
    [4] => woord;woord;woord;woord;woord;woord;"woord 
    [5] => woord woord"
)

dit klopt dus niet zoals ik al zei omdat file() niet controleerd op de tekens van een csv bestand...

mijn doel is om gewoon dit te krijgen:
code:
1
2
3
4
5
6
Array
(
    [0] => woord;woord;woord;woord;woord;woord;"woord woord woord"
    [1] => woord;woord;woord;woord;woord;woord;"woord woord woord"
    [2] => woord;woord;woord;woord;woord;woord;"woord woord woord"
)

dan kan ik gemakkelijk alle waarden eruit halen en vervolgens alle andere activiteiten die nodig zijn...

Maarjah hoe kan ik fatsoenlijk voor elkaar krijgen?
Ben al vele uren aan het proberen geweest sinds de start van dit topic maar zonder succes.
Het gaat er gewoon om dat ik een csv kan openen met meerdere records in principe die dan vervolgens weg worden geschreven naar een array().
:'(

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Tijgertje84 schreef op zaterdag 14 april 2007 @ 20:23:
nou fgetcsv gaat niet werken bij mij :(
deze functie werkt alleen voor maar 1 regel....
Je leest nog steeds de handleiding niet. De 1e regel in de handleiding leest "fgetcsv — Gets line from file pointer and parse for CSV fields" en de eerste example in de handleiding is genaamd "Read and print the entire contents of a CSV file".

Nofi, maar als je niet wil lezen wat je aan het doen bent valt er voor ons niet tegenop te helpen. :> De gemiddelde csv beslaat wel meer dan 1 regel, dus je hebt niet te maken met een zeer exceptioneel probleem of zo. ;)

{signature}


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Voutloos schreef op zaterdag 14 april 2007 @ 20:29:
[...]
Je leest nog steeds de handleiding niet. De 1e regel in de handleiding leest "fgetcsv — Gets line from file pointer and parse for CSV fields" en de eerste example in de handleiding is genaamd "Read and print the entire contents of a CSV file".

Nofi, maar als je niet wil lezen wat je aan het doen bent valt er voor ons niet tegenop te helpen. :> De gemiddelde csv beslaat wel meer dan 1 regel, dus je hebt niet te maken met een zeer exceptioneel probleem of zo. ;)
zucht :| jah maar in dat geval wordt de 2de array pas gemaakt als hij een "," tegen komt
ofwel dat duid op het einde van een record van een csv imo...
maar een standaard CSV eindigd niet met een , die eindigd namelijk met NIETS |:( net nog geprobeerd met excel een bestand opslaan als csv en dan kladblok/wordpad openen..
geen eind teken te zien

edit: }:|
nu heb ik precies de hele code gekopieerd en uitgetest jah forget it dat werkt nog steeds niet en doet precies wat er in mijn vorige post al stond
dit is de respons van de voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
1 fields in line 1: 
woord;woord;woord;woord;woord;woord;"woord 
1 fields in line 2: 
woord woord"
1 fields in line 3: 
woord;woord;woord;woord;woord;woord;"woord 
1 fields in line 4: 
woord woord"
1 fields in line 5: 
woord;woord;woord;woord;woord;woord;"woord 
1 fields in line 6: 
woord woord"
]
dus tjah dat gaat gewoon niet werken tenzij ik perse aan het einde van mijn records een of ander teken pleur wat dan in principe nergens anders meer mag voorkomen omdat hij anders daar weer verkeerd gaat splitten.

[ Voor 27% gewijzigd door Tijgertje84 op 14-04-2007 20:46 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Tijgertje84 schreef op zaterdag 14 april 2007 @ 20:34:
maar een standaard CSV eindigd niet met een , die eindigd namelijk met NIETS |:( net nog geprobeerd met excel een bestand opslaan als csv en dan kladblok/wordpad openen..
geen eind teken te zien
Wat eindigt? Je bedoelt dat een regel eindigt, en die eindigt inderdaad niet met een direct zichtbaar character. Parsers kunnen niet dankzij aardstralen weten wanneer een regel eindigt, dus er staat wel gewoon IETS. :P En dat iets is een end of line sequence, dwz de Carriage Return "\r", de LifeFeed "\n", of de CRLF "\r\n".
Tijgertje84 schreef op zaterdag 14 april 2007 @ 20:23:
PHP:
1
2
3
$file = fopen("woord.csv", "r");
$csv = fgetcsv($file,1000,';','"'); //de ';','"' om te zorgen dat hij dan elke waarde van de regel spit etc
info($csv ); // eigen sscriptje voor duidelijker overzicht dan var_dump()

hiermee krijg ik dan
code:
1
2
3
4
5
6
7
8
9
10
11
Array
(
    [0] => woord
    [1] => woord
    [2] => woord
    [3] => woord
    [4] => woord
    [5] => woord
    [6] => woord 
woord woord
)

Maar dit wil in dus niet.
Wat wil je niet? Je wil niet een element per field, maar gewoon 1 string. Explode() ken je al, maar kijk eens naar implode. Een simpele implode zorgt al voor het gewenste resultaat.

NB: jouw info() functie lijkt nogal op de standaard aanwezig print_r() functie. ;)
Tijgertje84 schreef op zaterdag 14 april 2007 @ 20:34:
edit: }:|
nu heb ik precies de hele code gekopieerd en uitgetest jah forget it dat werkt nog steeds niet en doet precies wat er in mijn vorige post al stond
dit is de respons van de voorbeeld: ....
dus tjah dat gaat gewoon niet werken tenzij ik perse aan het einde van mijn records een of ander teken pleur wat dan in principe nergens anders meer mag voorkomen omdat hij anders daar weer verkeerd gaat splitten.
Waarom nou weer dat voorbeeld niet aanpassen voor de field delimiters die jij gebruikt? Hoe moet fgetcsv nou slim parsen als deze niet eens de correcte field delimiter ingefluisterd krijgt? Die laatste aanpak is ook geen oplossing, want je verschuift dan het probleem: je krijgt nog steeds ongewenst gedrag bij een bepaalde string.

{signature}


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
ok snif ik ga huilen :'(
btw betreft dat einde is dom nagedacht van mij 8)7 had ik zeker moeten weten mijn excuses dat ik daar zon drama van maakte lol
ik snap dat ook wel dat ik mijn eigen delimiter daar moet neer zetten.
maar heb alles al geprobeerd van niets tot , tot /r tot ruw CRLF ingepleurd :P |:(
maar weet gewoon niet wat ik daar in moet zetten... :X
het enigste teken waar hij op reageerd is de ; die natuurlijk overal in die csv staan :P

[ Voor 17% gewijzigd door Tijgertje84 op 14-04-2007 21:18 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • BBrunekreeft
  • Registratie: Mei 2004
  • Laatst online: 08:29

BBrunekreeft

Dus...

Is het een optie om rechtstreeks een Excel bestand in te lezen i.p.v. een CSV bestand?
Daarvoor is PHP Excelreader heel geschikt.
Ben je meteen van dat gedoe met die enters af.

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
Als je geen end-of-line char gebruikt (wat me trouwens sterk lijkt dat je dat niet aan kan zetten bij het exporteren uit Excel, maargoed) is de enige manier waarop je parser kan zien of een newline in een veld zit of het einde van een regel aanduid door te kijken naar de quotes eromheen. In principe zou je dat vrij eenvoudig met een regexp moeten kunnen bepalen.

Voorbeeldje:

PHP:
1
2
3
4
$new_data = preg_replace_callback("@\"([^\r\n]+)[\r\n]+[^\"]*\"@", 
                                  create_function('$matches',
                                                  'return preg_replace("@[\r\n]+@", " ", $matches[0]);'),
                                  $data);


Hiermee verandert
code:
1
2
3
4
5
6
7
8
woord;woord;woord;woord;"woord
woord";woord;"woord 
woord woord"
woord;woord;woord;woord;woord;woord;"woord 
woord woord"
woord;woord;woord;woord;woord;woord;"woord 
woord
woord"


in

code:
1
2
3
woord;woord;woord;woord;"woord woord";woord;"woord woord woord"
woord;woord;woord;woord;woord;woord;"woord woord woord"
woord;woord;woord;woord;woord;woord;"woord woord woord"


doe-het-zelf-voorbeeld

Verklaring: de preg_replace_callback zoekt stukken tekst met een linebreak erin die tussen aanhalingstekens staat. De callbackfunctie die aangemaakt wordt zoekt vervolgens op alle linebreaks in die tekst en haalt ze eruit. Niet de mooiste oplossing, maar gok dat't wel precies doet wat jij nodig hebt.. ;)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 15:53
Ik weet niet hoe kritisch het allemaal is, maar met deze oplossing verander je wel de invoer van de gebruiker. Waar eerst een newline stond, staat nu een spatie. Mag dat?

Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
FragFrog schreef op zondag 15 april 2007 @ 03:48:
Als je geen end-of-line char gebruikt (wat me trouwens sterk lijkt dat je dat niet aan kan zetten bij het exporteren uit Excel, maargoed) is de enige manier waarop je parser kan zien of een newline in een veld zit of het einde van een regel aanduid door te kijken naar de quotes eromheen. In principe zou je dat vrij eenvoudig met een regexp moeten kunnen bepalen.

Voorbeeldje:

PHP:
1
2
3
4
$new_data = preg_replace_callback("@\"([^\r\n]+)[\r\n]+[^\"]*\"@", 
                                  create_function('$matches',
                                                  'return preg_replace("@[\r\n]+@", " ", $matches[0]);'),
                                  $data);


Verklaring: de preg_replace_callback zoekt stukken tekst met een linebreak erin die tussen aanhalingstekens staat. De callbackfunctie die aangemaakt wordt zoekt vervolgens op alle linebreaks in die tekst en haalt ze eruit. Niet de mooiste oplossing, maar gok dat't wel precies doet wat jij nodig hebt.. ;)
dat lijkt er inderdaad beter op! bedankt
maar welke waarde moet ik in de plaats van de $data zetten? Het moet een mixed var zijn maar hoe krijg ik de waarde uit een csv in een mixed var want kan het alleen of in een array met file() krijgen of in een resource met fopen() :'(
in jouw voorbeeld gaat dit alleen voor een string op begrijp ik

[ Voor 17% gewijzigd door Tijgertje84 op 15-04-2007 12:36 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
DaCoTa schreef op zondag 15 april 2007 @ 10:51:
Ik weet niet hoe kritisch het allemaal is, maar met deze oplossing verander je wel de invoer van de gebruiker. Waar eerst een newline stond, staat nu een spatie. Mag dat?
Tja, hij wil geen harde enters in z'n applicatie, dan kun je weinig anders vrees ik. Eventueel zou je wel ervoor kunnen kiezen om zo'n linebreak om te zetten in een <br /> in plaats van een spatie, tijdens weergave op't net ziet het er dan toch uit zoals het in het oorspronkelijke veld staat, bovendien heb je dan een redelijk unieke delimiter voor het veld.
Tijgertje84 schreef op zondag 15 april 2007 @ 12:33:
dat lijkt er inderdaad beter op! bedankt
maar welke waarde moet ik in de plaats van de $data zetten? Het moet een mixed var zijn maar hoe krijg ik de waarde uit een csv in een mixed var want kan het alleen of in een array met file() krijgen of in een resource met fopen() :'(
in jouw voorbeeld gaat dit alleen voor een string op begrijp ik
Zijn natuurlijk meerdere opties voor. Het handigste voor jou is denk ik gebruik te maken van een array callback icm file(). Dat zou er zo uitzien:

PHP:
1
2
3
4
5
6
7
8
function cleanExcelData($data) {
  return preg_replace_callback("@\"([^\r\n]+)[\r\n]+[^\"]*\"@", 
                                    create_function('$matches',
                                                    'return preg_replace("@[\r\n]+@", " ", $matches[0]);'),
                                    $data);
}

$new_data = array_map("cleanExcelData", $data);


Andere optie is gebruik te maken van file_get_contents() in plaats van file() zodat je't bestand als string inleest in plaats van array :)

Overigens is dit wel heel erg basic (fopen leest bijvoorbeeld geen bestand in, het opent slechts een filepointer naar een bestand, wat ook gewoon in de handleiding staat. Als je het bestand daarna daadwerkelijk in een string wilt zetten moet je gebruik maken van fread() - alhoewel file / file_get_contents makkelijkere equivalenten zijn), als je hier meer mee wilt doen raad ik je toch echt aan je er wat verder in te verdiepen, PHP is zowat de simpelste taal die ik ken, zoveel moeite kan dat niet kosten. Doe je dat niet heb je kans dat je op een gegeven moment een bedrijfscritische applicatie plat hebt liggen omdat je van-internet-geplukte-scriptje niet rekening hield met een bepaald geval.. ;)

//edit
Bedenk me net dat als je met file werkt je kans hebt dat je records alsnog verkeerd ingelezen worden omdat de newline in je bestand dan alsnog als nieuw array-item gezien wordt, dus dan moet je toch file_get_contents gebruiken :)

[ Voor 4% gewijzigd door FragFrog op 16-04-2007 23:20 ]

[ Site ] [ twitch ] [ jijbuis ]

Pagina: 1