NAS

PHP Prüfen ob Token leer ist

Sund0se

Cadet 4th Year
Registriert
Mai 2010
Beiträge
73
hey leute

Ich hab dass Problem, dass seit PHP 4.1.0 ein leerer Token von einem String tokenzer einfach verworfen wird, obwohl ich lieber einen leeren String ausgeben würde. Nun nimmt der Tokenizer einfach das nächste Token und gibt es aus. Wie schaffe ich es, einen leeren String auszugeben, und dann erst das nächste Token anzusprechen?

Hab auch schon versucht, zu prüfen, ob die Tokenvariable leer ist, mithilfe von:

PHP:
if (empty($var) && $var!==0) 
{ 
  echo('var ist leer'); 
}

geht aber leider auch nicht!

Bitte um Hilfe
 
Was ist der Unterschied zwischen "verworfen" und "leeren String ausgeben"?
 
Solltest deine AND Verknüpfung überdenken.
Empty() betrachtet leere Variablen ("") auch als leer, vielleicht bekommst du so einen Wert zurück? Ist die Variable überhaupt gesetzt? (isset)
 
Ich denke mal verworfen bedeutet, dass er den Token nicht einmal beachtet und einfach stattdessen den nächsten nimmt.
Habe es mit empty($token) versucht. Er erkennt keinen leeren String (""), daher müsste er den Token einfach überspringen. Ja, die Variable ist immer gesetzt!
Ergänzung ()

Vielleicht ein wenig konkreter:
Ich lese Daten aus einer csv-Datei. Es gibt ein paar Zeilen wo Zellen leer sind. Diese werden übersprungen und dann wird der Inhalt der nächsten Zelle ausgegeben. Dass will ich aber verhindern und ich will einen leeren String ausgeben, wenn in einer Zelle nichts vorhanden ist.

lg
 
Zuletzt bearbeitet:
Zeig uns doch mal deinen aktuellen PHP Syntax, dann können wir uns ein Bild davon machen und Dir eventuell besser bei der Problembehandlung helfen.
 
Wenn die leeren Zellen übersprungen werden, dann wird's wohl nicht an der Abfrage liegen...
Wieso zeigst du nicht mal wie du strtok verwendest und noch zwei Beispieldatensätze (einen korrekten, einen unvollständigen)...
 
PHP:
if (($handle = fopen("teacherlist.csv", "r")) !== FALSE) {
	// Zeile lesen und Array mit gelesenen Feldern zurückgeben
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

			$comma_separated = implode(";", $data);	// Array in String umwandeln 
			$tok = strtok($comma_separated, ";");	// String in Token zerlegen
			echo "Nachname: $tok"; $tok = strtok(";");
			echo " Vorname: $tok"; $tok = strtok(";"); 
			echo " Titel: $tok"; $tok = strtok(";");
			echo " Grad: $tok"; $tok = strtok(";"); 
			echo " Gegenstand: $tok"; $tok = strtok(";");
}
}

So ca. hätte ich es gelöst. Jedoch hat in der csv-Datei nicht jeder Lehrer einen Titel bzw. Grad.
 
Und wie sieht dann eine entsprechende Zeile aus?

Und wieso überhaupt so umständlich über den Tokenizer? oO

wieso machst du nicht Konstanten
COL_LASTNAME = 0
COL_FIRSTNAME = 1
COL_TITLE = 2
COL_DEGREE = 3
COL_SUBJECT= 4

und dann
PHP:
			echo "Nachname: ".$data[COL_LASTNAME]; 
			echo " Vorname: ".$data[COL_FIRSTNAME]; 
			echo " Titel: ".$data[COL_TITLE]; 
			echo " Grad: ".$data[COL_DEGREE]; 
			echo " Gegenstand: ".$data[COL_SUBJECT];
 
In solchen Fällen explode ich auch immer am Separator und verarbeite dann das Array, wesentlich einfacher.
 
Oder über
Code:
list( $Nachname, $Vorname, $Titel, ... ) = explode( ';', $data );
 
Er gibt dann beispielsweise aus:

Nachname: Mustermann Vorname: Max Titel: Dipl.-Päd. Grad: FPU-E Gegenstand:

Es sollte jedoch beim Titel nichts stehen, und Dipl.-Päd. bei Grad und FPU-E bei Gegenstand. Versteht ihr was mein Problem ist?

Mit Konstanten funktioniert es nicht bei mir.
 
Nein die csv dürft nicht kaputt sein.

Wenn ich das Ganze ohne Formatierung ausgebe siehts so aus:

Mustermann;Max;;Dipl.-Päd.;FPU-E

Hier sind die zwei Semikolon nebeneinander zu sehen. Das heißt hier ist kein Titel vorhanden!
 
@Krafty und @Yuuir: Wozu im- und exploden, was schon als Array vorliegt? oO
 
Stimmt, bin vom Falle der ganzen Zeile ausgegangen. ;)
 
Kannst Du mal die CSV-Datei hochladen, als Beispiel?
 
Zuletzt bearbeitet:
Zurück
Oben