CSV Datei auslesen und bearbeitet ausgeben

son gohan

Erfahrenes Mitglied
Hallo, ich wollte gerne eine CSV Datei mit dem PHP Befehl ucwords bearbeiten das alle Einträge mit einem Großen Anfangsbuchstaben ausgegeben werden.

Hier mal das Script Beispiel von mir, das aber leider nicht:
PHP:
<?php
$handle = fopen ("test.csv","r");
while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) {

    $num = count ($data);

    for ($c=0; $c < $num; $c++) {

        print ucwords ($data[$c]). "<br>\n";
    }
}
fclose ($handle);
?>

, es wandelt die Einträge nämlich nicht in große Anfangsbuchstaben um, ich weis aber nicht genau woran es liegen könnte, ich denke mal die Syntax von mir ist nicht ganz korrekt.

Wenn es nicht daran liegt, dann könnte es vielleicht auch daran liegen das meine eingetragenen Wörter in der CSV Liste mit einem Bindestrich verbunden sind, z.B. so cd-brian-adams, mit der Funktion preg_replace könnte man die Bindestriche zwar mit Leerzeichen ersetzten, aber leider verstehe ich auch hier die Synatx von PHP noch nicht gut genug um soetwas, mag sein, einfaches selber zu machen.
 
http://de.php.net/ucwords hat gesagt.:
The definition of a word is any string of characters that is immediately after a whitespace (These are: space, form-feed, newline, carriage return, horizontal tab, and vertical tab).
Der Bindestrich wird also nicht als Worttrennzeichen erkannt. Ersetzen könntest du die Bindestriche ganz einfach mit [phpf]str_replace[/phpf].
 
Naja laut Beschreibung ist die Funktion fgetcsv() so aufgebaut

fgetcsv($datei, länge der einzulesenden Zeichen , Trennzeichen)

Also wird bei Deinen Beispiel immer bei einen Komma ein neues Array Element gebildet, somit würde er auch das cd-brian-Adams als ganzen String erkennen und dort dann das C gross schreiben denk ich.
Wahlweise kannst Du wieder explode() nehmen meine Lieblingsfunktion *G* oder wesentlich leichter und schneller wie schon erwähnt wurde mit str_replace().
Gleich mit reguläen Ausdrücken anzurücken wäre quatsch.

PHP:
     <?php
     ...
      $data = ucwords(str_replace( "-"," ",$data));
 /*blos ist die Frage wie bekommen wir nun da wieder die Bindestriche rein , ist halt die Frage ob nach was davor oder danach steht wenn nicht */
     $data = str_replace(" ","-",$data);
 /* also vorher musst Du vorher eh jedes Wort durchkauen ob und es einzeln bearbeiten denk ich , sofern die Bindestriche wieder erscheinen sollen  */
     ?>
 
Zuletzt bearbeitet:
Hi,

um das ganze zu vereinfachen habe ich jetzt meine CSV Datei geändert, es stehen jetzt alle Wörter ohne Bindestriche drine in nur einer Spalte drine.

Mein Code mit dem ich jetzt die Anfangsbuchstaben der Wörter eigentlich alle groß Geschrieben ausgegeben haben wollte sieht jetzt so aus:

PHP:
<?php
$handle = fopen ("test.csv","r");
while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) {
    
$data = ucwords($data);
   
    $num = count ($data);

    for ($c=0; $c < $num; $c++) {

        print $data[$c]. "<br>\n";
    }
}
fclose ($handle);
?>

Das Ergebnis ist aber, eine Seite mit lauter A, also wurden alle Einträge in große A Buchstaben umgewandelt, komisch oder?
 
Abgesehen von der VAriante fgetcsv habe iich noch eine zweite probiert mit dem normalne fgets:

<?php
$handle = fopen ("test.csv","r");

while (!feof($handle)) {

$buffer = fgets($handle);

$num = count ($buffer);

$buffer = ucwords($buffer);

for ($i=0; $i<$num; $i++)
{
echo $buffer[$i]."<br>";
}
}
fclose ($handle);
?>

Bei dem Beispiel scheint das ucwords zwar zu greifen, aber ich bekomme auch nur jeweils den Anfangsbuchstaben der Wörter ausgegeben ohne den Rest, in der CSV besteht nur eine Spalte für alle Wörter. Die Wörter sind alle zwei bis dreistellig: z.B. CD Brian Adams.

Wieso bekomme ich immer nur den Anfangsbuchstaben?
 
Nakommt schon das wird doch nicht so schwer sein. Ich will nur wissen warum in meinem Beispiel nur ein Buchstabe und nicht das ganze Wort erscheint als Ausgabe?
 
Hi, jeden den es noch Zufällig interissiert, ich habe eine Löung gefunden.

PHP:
 <?php
$handle = fopen ("test.csv","r");

while (!feof($handle)) {

$buffer = fgets($handle);

$buffer = ucwords($buffer);

echo $buffer."<br>";

}
fclose ($handle);
?>
 
Zurück