dBase-Dateien laden und anzeigen

dBase-Dateien laden und anzeigen

am 23.11.2006 02:08:01 von Tobias Wendorff

Hey Leute,

ich möchte gerne eine dBase-4 Datei in PHP importieren, anzeigen
und ggf. als CSV exportieren.

Hier ein Beispiel einer meiner Dateien:
http://www.tobwen.de/temp/NOV06.zip

43200 Zeilen und 15 Spalten; Excel importiert sie fehlerfrei.
PHP erkennt die Zeilen- und Spaltenanzahl auch korrekt, aber
bricht immer nach der dritten Spalte ab. Im Array steht dann immer
"deleted" und danach kommt die neue Zeile :-(

Hier ein Test-Script:

//Datenbank öffnen
$db_file = 'NOV06.DBF';
$db = dbase_open($db_file, 0);

//Anzahl der Datensätze
$nr = dbase_numrecords($db);
echo 'Anzahl der Datensätze: ' . $nr . "
\n";

$nf = dbase_numfields($db);
echo 'Anzahl der Spalten: ' . $nf . "
\n";

echo 'Inhalt: ' . "
\n";
for($i = 1; $i < $nf + 1; $i++){
$res = dbase_get_record($db, $i);
var_dump($res);
}

Kann jemand helfen?

Vielen Dank
Tobias

Re: dBase-Dateien laden und anzeigen

am 23.11.2006 07:29:51 von Claus Reibenstein

Tobias Wendorff schrieb:

> http://www.tobwen.de/temp/NOV06.zip

,----------
| Netzwerk-Zeitüberschreitung
|
| Zeitüberschreitung beim Verbindungsaufbau zu www.tobwen.de.
|
| Die angefragte Site hat auf eine Verbindungsanfrage nicht geantwortet
| und der Browser hat aufgehört, auf eine Antwort zu warten.
`----------

Nach dem dritten Versuch habe ich es aufgegeben.

Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /

Re: dBase-Dateien laden und anzeigen

am 23.11.2006 08:05:49 von Tobias Wendorff

Claus Reibenstein wrote:
>> Zeitüberschreitung beim Verbindungsaufbau zu www.tobwen.de.
>>
>> Die angefragte Site hat auf eine Verbindungsanfrage nicht geantwortet
>> und der Browser hat aufgehört, auf eine Antwort zu warten.
>> `----------
>
> Nach dem dritten Versuch habe ich es aufgegeben.

Unglaublich ... das erste Mal, dass der Server komplett nicht
reagiert. Gleich mal den Admin wachklingeln.

Danke für den Hinweis!

Re: dBase-Dateien laden und anzeigen

am 23.11.2006 10:58:15 von sk

Tobias Wendorff schrieb:
> > Hey Leute,

> > bricht immer nach der dritten Spalte ab. Im Array steht dann immer
> > "deleted" und danach kommt die neue Zeile :-(

> > echo 'Anzahl der Spalten: ' . $nf . "
\n";

$nf hat Anzahl der Spalten;

> > echo 'Inhalt: ' . "
\n";
> > for($i = 1; $i < $nf + 1; $i++){
> > $res = dbase_get_record($db, $i);

Wenn du N Spalten hast hört das lesen nach der Nten Zeile auf. Du suchst
bestimmt deine $nr Variable und nicht die $nf.

Jörg

Re: dBase-Dateien laden und anzeigen

am 23.11.2006 12:03:06 von Claus Reibenstein

Tobias Wendorff schrieb:

> for($i = 1; $i < $nf + 1; $i++)

Autsch!

Ich würde zwei Alternativen vorschlagen:

for($i = 0; $i < $nf; ++$i)
for($i = 1; $i <= $nf; ++$i)

Erstere ist die gebräuchlichere.

Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /

Re: dBase-Dateien laden und anzeigen

am 23.11.2006 15:13:29 von Werner Flamme

Tobias Wendorff schrieb am 23.11.2006 02:08:
> Hey Leute,
>
> ich möchte gerne eine dBase-4 Datei in PHP importieren, anzeigen
> und ggf. als CSV exportieren.
>
> Hier ein Beispiel einer meiner Dateien:
> http://www.tobwen.de/temp/NOV06.zip
>
> 43200 Zeilen und 15 Spalten; Excel importiert sie fehlerfrei.
> PHP erkennt die Zeilen- und Spaltenanzahl auch korrekt, aber
> bricht immer nach der dritten Spalte ab. Im Array steht dann immer
> "deleted" und danach kommt die neue Zeile :-(
>
....

>
> Kann jemand helfen?
>
> Vielen Dank
> Tobias
>
>
Hallo Tobias,

das Verhalten von PHP (4.4.0) kann ich leider nachvollziehen :-( - jedoch
nicht begründen.

Wenn man die PHP-dbase-Funktionen beiseite lässt und die dBase-Klasse von
http://www.php-resource.de/forum/showthread.php?threadid=547 61 benutzt,
kommen die Daten wunderschön, so wie sie auch in $ANDERERSOFTWARE angezeigt
werden ;-) Du solltest nur die Abfrage nach "//Make sure that we indeed
have a dbf file..." auf 4 und 139 statt 3 und 131 anpassen - siehe
http://www.clicketyclick.dk/databases/xbase/format/dbf.html :-)

Was sagt uns das? Und die Moral von der Geschicht: verlass auf PHP-dbase
Dich nicht? :-/

HTH,
Werner

- der aus Deinem "$i < $nf + 1" ein "$i <= $nr" machen würde ;-)

Re: dBase-Dateien laden und anzeigen

am 24.11.2006 02:29:49 von Tobias Wendorff

Hey Claus,

Claus Reibenstein wrote:
> Ich würde zwei Alternativen vorschlagen:
>
> for($i = 0; $i < $nf; ++$i)
> for($i = 1; $i <= $nf; ++$i)
>
> Erstere ist die gebräuchlichere.

Ich beschäftige mich zwar erst seit 4 Jahren, aber ++$i ist mir
noch nie als gebräuchlichste Alternative vorgekommen.

Grüße
Tobias

Re: dBase-Dateien laden und anzeigen

am 24.11.2006 02:43:04 von Markus Kobligk

Tobias Wendorff schrieb:
>> for($i = 0; $i < $nf; ++$i)
>> for($i = 1; $i <= $nf; ++$i)
>>
>> Erstere ist die gebräuchlichere.
>
> Ich beschäftige mich zwar erst seit 4 Jahren, aber ++$i ist mir
> noch nie als gebräuchlichste Alternative vorgekommen.

Gemeint wohl eher, dass es unüblich ist die Laufvariable bei 1 anfangen
zu lassen und dann auf < $var + 1 zu testen, so wie Du es machst.

..\\arkus

Re: dBase-Dateien laden und anzeigen

am 24.11.2006 04:25:43 von Tobias Wendorff

Markus Kobligk wrote:
> Gemeint wohl eher, dass es unüblich ist die Laufvariable bei 1
> anfangen zu lassen und dann auf < $var + 1 zu testen, so wie Du es
> machst.

Ach Mist ... ich habe das als Beispiel-Script aus dem Internet
übernommen und gar nicht drauf geachtet, dass eine "1" da stand.

Die 1. Zeile wurde aber vermutlich ausgelassen, weil da ja die
Spaltennamen stehen (ist das überhaupt in einer dBASE auch so?)

Re: dBase-Dateien laden und anzeigen

am 24.11.2006 04:47:04 von Tobias Wendorff

Jörg Singendonk wrote:
> Wenn du N Spalten hast hört das lesen nach der Nten Zeile auf. Du
> suchst bestimmt deine $nr Variable und nicht die $nf.

Nur ein Kopierfehler, ändert aber nix. PHP zeigt nur die ersten
drei Spalten an und nimmt sich dann eine neue Zeile vor.

Re: dBase-Dateien laden und anzeigen

am 24.11.2006 04:48:08 von Tobias Wendorff

Hey Werner,

Werner Flamme wrote:
> Was sagt uns das? Und die Moral von der Geschicht: verlass auf
> PHP-dbase Dich nicht? :-/

Ach so ein Mist. Ich wollte nicht auf externe Scripts zurück
greifen.

> - der aus Deinem "$i < $nf + 1" ein "$i <= $nr" machen würde ;-)

Ist nicht meins, nur zu Darstellungszwecken aus dem Web kopiert.

Grüße
Tobias

Re: dBase-Dateien laden und anzeigen

am 24.11.2006 08:28:32 von Claus Reibenstein

Tobias Wendorff schrieb:

> Hey Claus,

Hey Toby,

> Claus Reibenstein wrote:
>
>> Ich würde zwei Alternativen vorschlagen:
>>
>> for($i = 0; $i < $nf; ++$i)
>> for($i = 1; $i <= $nf; ++$i)
>>
>> Erstere ist die gebräuchlichere.
>
> Ich beschäftige mich zwar erst seit 4 Jahren, aber ++$i ist mir
> noch nie als gebräuchlichste Alternative vorgekommen.

Da bin ich schon 20 Jahre weiter :-)

Um das ++$i ging es in erster Linie aber nicht, wie Markus bereits
bemerkt hat. Trotzdem halte ich ein Prä-Inkrement für besser als ein
Post-Inkrement, auch wenn es an dieser Stelle keine Auswirkung hat, da
der Wert des Ausdrucks sowieso verworfen wird.

Ist aber eher wieder eine der vielen Stilfragen, für die es
bekanntermaßen kein "richtig" oder "falsch" gibt.

Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /

Re: dBase-Dateien laden und anzeigen

am 24.11.2006 10:53:41 von Werner Flamme

Tobias Wendorff schrieb am 24.11.2006 04:25:
>
> Ach Mist ... ich habe das als Beispiel-Script aus dem Internet
> übernommen und gar nicht drauf geachtet, dass eine "1" da stand.
>
> Die 1. Zeile wurde aber vermutlich ausgelassen, weil da ja die
> Spaltennamen stehen (ist das überhaupt in einer dBASE auch so?)
>
>

Also, wenn ich mir die "user contributed notes" auf
http://www.php.net/manual/en/function.dbase-get-record-with- names.php
ansehe, ist der nullte Datensatz einfach leer.

Gruß
Werner

Re: dBase-Dateien laden und anzeigen

am 24.11.2006 10:55:59 von Werner Flamme

Tobias Wendorff schrieb am 24.11.2006 04:48:
> Hey Werner,
>
> Werner Flamme wrote:
>> Was sagt uns das? Und die Moral von der Geschicht: verlass auf
>> PHP-dbase Dich nicht? :-/
>
> Ach so ein Mist. Ich wollte nicht auf externe Scripts zurück
> greifen.

Dann integriere es doch in Deinen Code:
a) es funktioniert ;-)
b) auch ohne dass die PHP-dbase-Extension installiert sein muss

>
>> - der aus Deinem "$i < $nf + 1" ein "$i <= $nr" machen würde ;-)
>
> Ist nicht meins, nur zu Darstellungszwecken aus dem Web kopiert.

Hm... die Beispiele auf php.net schreiben so was nicht ;-)

>
> Grüße
> Tobias

dito
Werner

Re: dBase-Dateien laden und anzeigen

am 24.11.2006 13:21:02 von Norbert Melzer

Am Fri, 24 Nov 2006 08:28:32 +0100 schrieb Claus Reibenstein:

> Um das ++$i ging es in erster Linie aber nicht, wie Markus bereits
> bemerkt hat. Trotzdem halte ich ein Prä-Inkrement für besser als ein
> Post-Inkrement, auch wenn es an dieser Stelle keine Auswirkung hat, da
> der Wert des Ausdrucks sowieso verworfen wird.
>
> Ist aber eher wieder eine der vielen Stilfragen, für die es
> bekanntermaßen kein "richtig" oder "falsch" gibt.

Ich denke nicht, daß es sich da um eine "reine Stilfrage" handelt. Denn
rein der Logik nach müsste ein ~Prä-(In|De)krement~ etwas schneller sein
als ein ~Post-(In|De)krement~. Denn bei der Prä Variante muss der "alte"
Wert der Variable nicht für eine eventuelle weitere Nutzung im Speicher
gehalten werden. Es wird somit Quasi das umkopieren und eine
Wertrückgabe aus einer Funktion vermieden.

Zumindest wird diese Logik in C und C++ gerne gepredigt, aber ich denke
in PHP wird es ähnlich sein.

MfG
Norbert
--
Link zur PHP-FAQ http://www.php-faq.de

Re: dBase-Dateien laden und anzeigen

am 25.11.2006 20:35:26 von Tobias Wendorff

Werner Flamme wrote:
> Hm... die Beispiele auf php.net schreiben so was nicht ;-)

Unglaublich - da sind jetzt Beispiele!! Als ich vor ein paar
Tagen geguckt habe, war da nichts und darum war ich
ziemlich hilflos :-)

Re: dBase-Dateien laden und anzeigen

am 01.12.2006 11:25:36 von Thomas Rachel

Norbert Melzer wrote:

> Ich denke nicht, daß es sich da um eine "reine Stilfrage" handelt. Denn
> rein der Logik nach müsste ein ~Prä-(In|De)krement~ etwas schneller
> sein als ein ~Post-(In|De)krement~. Denn bei der Prä Variante muss der
> "alte" Wert der Variable nicht für eine eventuelle weitere Nutzung im
> Speicher gehalten werden. Es wird somit Quasi das umkopieren und eine
> Wertrückgabe aus einer Funktion vermieden.

Naja, in bezug auf C denke ich schon mal, daß die beiden sich nichts
nehmen werden, zumindest wenn sie als separate Befehle geschrieben
werden.

Will sagen: Egal ob ich schreibe i++ oder ++i, der Compiler sieht, daß
ich nur den Wert von i erhöhen will, aber nichts weiter damit mache. Von
daher gibt es definitiv auch keine "eventuelle weitere Nutzung", es muß
nix im Speicher gehalten werden und die beiden Befehle ergeben denselben
Code. (Zumindest mal unter gcc 3.3.5 für x86)

Nur wenn Du das Ergebnis weiterverarbeiten willst, macht es einen
Unterschied, da es hier darauf ankommt, welchen der beiden Werte (alt
oder neu) Du im Endeffekt brauchst.

(Bei C++ mag es nochmal anders sein.)


Ich denke hier auch mal, daß es sich bei PHP ähnlich verhält.


Thomas
--
Bildschirm löschen? Brennt er denn?

Re: dBase-Dateien laden und anzeigen

am 01.12.2006 12:38:58 von Norbert Melzer

Am Fri, 01 Dec 2006 11:25:36 +0100 schrieb Thomas Rachel:

> Will sagen: Egal ob ich schreibe i++ oder ++i, der Compiler sieht, daß
> ich nur den Wert von i erhöhen will, aber nichts weiter damit mache. Von
> daher gibt es definitiv auch keine "eventuelle weitere Nutzung", es muß
> nix im Speicher gehalten werden und die beiden Befehle ergeben denselben
> Code. (Zumindest mal unter gcc 3.3.5 für x86)

Bei der Diskusion zu dem Thema wird zu meist von einem Compiler ohne bzw
mit grausiger Optimierung ausgegangen. Und gerade wenn man versucht
portabel zu bleiben sollte man sich nicht auf die Optimierung verlassen.

MfG
Norbert
--
Link zur PHP-FAQ http://www.php-faq.de