PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Leere Datensätze im Array löschen


A.Bauer
26.09.2002, 23:14:16
Hallo,

kann mir jemand helfen? Ich habe eine datei xyz.txt in der mehrere Datensätze stehen, welche durch "Leerzeichen" voneinander getrennt sind (ist so vorgegeben).
Einer der Datensätze enthält Zahlen, welche aber unterschiedlich lang sind (zw. 6 bis 8 Stellen). Da ja kein Trenner vorhanden ist, wird bei den kleinen Zahlen ein weiterer Datensatz erzeugt, welcher leer ist.
Dadurch passt die Übergabe an eine Tabelle nicht. Wie kann ich diese leeren Datensätze entfernen?

Bsp. Daten in der .txt
20020607 19:31:48 10211 ADD REG domaine.de
20020618 01:09:43 100283 DEL REG domaine.info

Ausgabe sieht dann so aus
20020607|19:31:48|10211| | ADD|REG|domaine.de
20020618|01:09:43|100283|DEL|REG|domaine.info

Weiss jemand was ich da machen kann?

Gruss A.Bauer

SPiC
26.09.2002, 23:24:23
Hi!

nimm doch einfach fgetcsv()

Ich habe mal das Beispiel aus dem PHP-Manual auf Deinen "Begrenzer" angepasst.

$row = 1; // Anzahl der Arrays
$fp = fopen ("test.csv","r"); // Datei wird zum Lesen
// geöffnet
while ($data = fgetcsv ($fp, 1000, " ")) { // Daten werden aus der Datei
// in einen Array $data gelesen
// Hier kannst Du das Array $data verarbeiten....

}
fclose ($fp);



Nähere Infos zu fgetcsv() unter

http://www.php.net/manual/de/function.fgetcsv.php


=:-) Sebastian

A.Bauer
26.09.2002, 23:38:14
Mit dieser Anweisung arbeite ich schon. Aber ich habe schon alles mögliche versucht ich bekomme diesen leeren Datensatz nicht raus. Da er ja nicht in allen Zeile auftritt.
Gibt es eine Anweisung in der ich sagen kann wie gross (also wie viel Zeichen) ein Datensatz haben soll?

SPiC
26.09.2002, 23:44:19
Häh? Bei fgetcsv() ist es doch irrelevant, wie viele Zeichen ein Feld hat.

Du kannst es aber auch mal folgendermaßen versuchen:

Lies die Zeile über fgets() ein und trennen den String über explode()
Im PHP Manual ist sogar ein Beispiel dabei, dass genau auf Dich zutrifft (Trennung durch Space).
http://www.php.net/manual/de/function.explode.php

SPiC
26.09.2002, 23:46:37
Oder willst Du die Daten auf 6 Stellen allgemein kürzen?

Dann kannst Du auch per subrtr()
http://de.php.net/substr nur die ersten sechs Zeichen ausgeben...

A.Bauer
26.09.2002, 23:57:01
Da ist es ja was ich nicht verstehe, aber dadurch das die Zahlen unterschiedlich gross sind, sind da mehrere Leerzeichen hineinander und das führt dann zu dem leeren datensatz.

Habs auch schon explode versucht. Geht auch nicht.
Ich schau mir das aber mal an bei php.net

Nein ich kann die nicht kürzen, die sollen alle so bleiben.

Ben20
27.09.2002, 01:35:29
Zum allgemeinen Verständnis. Was A.Bauer meint sind glaube ich keine leeren Datensätze sondern leere Felder.

Versuchs doch mal so:
Bei jedem Datensatz (also jeder Zeile) prüfst Du jedes Feld. Wenn eines Leer - sprich nur Leerzeichen enthält löschst Du das Feld aus dem Array

SPiC
27.09.2002, 08:33:31
Ich glaube, ich verstehe...

Die TXT-Datei sieht also so aus:

20020607[s]19:31:48[s]10211[s][s][s]ADD[s]REG[s]domaine.de
20020618[s]01:09:43[s]100283[s]DEL[s]REG[s]domaine.info
[s]=Space
Ist das so richtig?

Wenn ja, würde ich fgets() verwenden, anschließend entfernst Du alle "Doppelspaces" mit str_replace() und dann kannst Du ein explode() machen, um die einzelnen Felder zu bekommen.

A.Bauer
29.09.2002, 21:21:01
Hallo,

danke nochmal für die Hilfe und sorry, dass ich heute erst wieder reinschaue. Ich dachte es hat niemand mehr geantwortet, war ja auch schon ziemlich spät gewesen. :))

Trotzdem nochmal danke!! Ich habe die Datei jetzt über Excel in eine csv mit Delimiter umgewandelt. Was zwar nicht im Sinne des Erfinders und ein bisschen umständlich war, aber es ging.

Ich habe aber noch eine andere Frage. Wie kann ich überprüfen, ob ein, aus einem Datum erzeugter Timestamp, auch das richtige Datum beinhaltet?


A.Bauer