csv lesen

Also ich will schon nach Zeilen gehen. Das was du gemacht hasst ist nach den Spalten zu gehen.
Also wenn er in :
$content[12][3]
nichts findet, dann soll er in
$content[11][3] suchen usw.
 
PHP:
for($j=$Zeilen; $content[$j][$i]!='""';$j--){
	if($content[$j][$i]!='""'){
        echo $content[$j][$i];  
    }
}
 
Ach so war das gemeint. Ok, ich hab ees jetzt so abgeändert, aber ich habe immer noch das selbe Problem. Hier mal der ganze Code. Vielleicht hilft das ja weiter(Nicht wunder, dass da so viel wirwar drin ist. Das Script ist noch im Aufbau):
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Unbenanntes Dokument</title>
</head>

<body>
<?php
function GetCSV($str, $celldelimiter=";", $linedelimiter="\n")
{
  $lines = explode($linedelimiter, $str);
  for ($i=0; $i<count($lines); $i++)
  {
    $lines[$i] = explode($celldelimiter, $lines[$i]);
  }
  return $lines;
}

$filename = "SB53963.csv";
$content = GetCSV(file_get_contents($filename));

// Testzeile
$Zeilen=1;
$Dateizeiger = fopen("SB53963.csv", "r");
while(($Daten=fgetcsv($Dateizeiger, 1000, ";"))!==FALSE){
	$AnzahlDerFelder = count($Daten);
	echo"<p><b>".$AnzahlDerFelder." Felder in Zeile ".$Zeilen.":</b><br>";
	$Zeilen++;
	for($i=0; $i<$AnzahlDerFelder; $i++){
		if($content[$Zeilen][$i] != '""'){
		  echo $content[$Zeilen][$i]."<br>";
		}
		else{
          for($j=$Zeilen; $content[$j][$i]!='""';$j--){
    		if($content[$j][$i]!='""'){
        	  echo $content[$j][$i];  
    		}
		  }
		}
	}
	echo"</p>";
}
fclose($Dateizeiger);

//

echo $content[1][1];  // Gibt den zweiten Wert in der ersten Zeile aus!  



?>
</body>
</html>
 
Frage. Enthalten die leeren Felder wirklich den String ""?
Normalerweise prüft man leeren Inhalt mit '' oder "", aber nicht mit '""'
Code:
'""' <> ''
 
Wieso benutzt du meine Funktion (GetCSV()) und dann noch fgetcsv()?
Du kannst auch gleich über $Array = GetCSV(file_get_contents($filename)); iterieren!
 
Ja meine leeren Strings sind sogesehen zwei Gänsefüßschen. Wenn ich die Überprüfung(ob es leer ist oder nicht) weglassen, dann gibt er mir bei den leeren Felder auch "" aus.

P.S. Ich sagte doch, dass das Script ein bisschen durcheinander ist, weil es noch im Aufbau ist.

Edit: Es muss irgendetwas mit der Schleife zu tun haben, weil wenn ich die rausnehmen, dann mir irgendetwas statisches anstat der leeren Felder ausgeben lasse, dann funktioniert es.
 
Zuletzt bearbeitet:
Hab mal ein kleines Beispiel geschrieben

PHP:
<?php 
/*
Testdatei test.csv
"a1","b1","c1"
"a2","b2","c2"
"a3","","c3"
"a4","b4",""
"","b5","c5"
*/

//Datei öffnen
$file = 'test.csv';
$handle = fopen($file,'r');  
$row = 1;
//Datei in einen 2-Dimensionalen Array schreiben
while ( ($row = fgetcsv ($handle, 1000, ",")) !== FALSE ) {
    $rows[] = $row;
}
fclose ($handle);

//Array Zeile um Zeile durchgehen
foreach($rows as $rowIdx => $row){
    //Spalte um Spalte
    foreach($row as $colIdx => $col){
        //Prüfen ob das Feld $ros[$rowIdx][$colIdx] leer ist
        if($col == ''){
            //Zeilen zurückgehen, maximum bis zu Index 0
            for($idx = $rowIdx; $idx >-1; --$idx){
                if($rows[$idx][$colIdx] != ''){
                    echo $rows[$idx][$colIdx];
                    break;  //for-Schleife verlassen
                }
            }
        } else {
            echo $col;
        } 
    }
    echo "<br />";   
}
?>

Ausgabe:
Code:
a1b1c1
a2b2c2
a3b2c3
a4b4c3
a4b5c5
 
Danke es funktioniert. Ich versche jetzt noch mal, aus dem Code schlau zu werden, aber es funktioniert schonmal. Also vielen dank euch allen.

MfG
EGJSoldier
 
Zurück