perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 29
Click for quality!




11.02.2012 / 16:37

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitragdbf: Datenreihen anfügen
Seitenanfang
Hallo,

ein weiteres Probelm, bei dem ich nicht weiterkomme und hoffe auf eventuelle Erfahrung von euch zurückgreifen zu können.
Ich versuche eine Reihe von Daten in ein .dbf-File zu schreiben. Eigentlich kein Problem mit dem Modul CAM::DBF. Ich generiere also ein dbf-File


my $dbf_out = CAM::DBF->create($dbf_outfile,
{name=>'DIST',
type=>'N', length=>8, decimals=>0},
{name=>'OBJ_ID',
type=>'N', length=>8, decimals=>0},
{name=>'RISK_CL',
type=>'C', length=>1, decimals=>0},
{name=>'X',
type=>'C', length=>8, decimals=>2},
{name=>'Y',
type=>'C', length=>8, decimals=>2},
{name=>'SYM_DIR',
type=>'C', length=>4, decimals=>0},
{name=>'SYM_INDI',
type=>'C', length=>4, decimals=>0},
{name=>'SYM_OBJ',
type=>'C', length=>8, decimals=>0},
);


Auch ist es kein Problem Daten anzufügen mit dem Befehl

$dbf_out->appendrow_arrayref($result[$i]);

Das Problem ist vielmehr, dass bei jedem neuen Aufruf per default alle vorherigen Einträge gelöscht werden. Ich will zwei Dateien nacheinander öffnen und deren Daten in das .dbf-File schreiben, was so natürlich nicht funktioniert. Ich habe also den ersten Programmteil, der das dbf erstellt, ausgegliedert und nutze dann den exec-Befehl um ein weiteres Skript zu starten, das die Daten verarbeitet. Wenn ich in der DOKU alles richtig verstanden habe, müsste ich mit

my $dbf = CAM::DBF->new($dbf_out_file);
for (my $i=0;$i<@result;$i++){
$dbf->appendrow_arrayref($result[$i]);
}

Zeilen anfügen können. Ich bekomme aber die Fehlermeldung "the file xxx.dbf dosen't seem to be a DBFIII File...". Das ist doch sehr merkwürdig, schließlich habe ich es mit dem gleichen Modul kurz zuvor erstellt.

Kann mir jemand an dieser Stelle Aufschluß geben oder zumindest einen Hinweis?

Danke! LarsVegas

Datum: 20.06.2007-18:47

Beitragre: dbf: Datenreihen anfügen
Seitenanfang
Hallo,

ich habe das Problem gelöst, indem ich alle Daten, die ich letztendlich in das File schreiben will, in ein Array pushe und am Ende des Programms die dbf-Schreibroutine starte. Trotzdem würde mich interessieren, wie man an ein bestehendes .dbf-File Zeilen anfügt OHNE die vorherigen Einträge zu löschen...

Greets, LarsVegas

Datum: 20.06.2007-19:14

Beitragre: dbf: Datenreihen anfügen
Seitenanfang
Laut Doku erzeugst du mit 'create' neue (anfangs leere) Datei, mit 'new' oeffnest du eine bestehende Datei, die eingelesen wird.

create($filename, $filemode, [flags,] $column, $column, ...)

Create a new DBF file in $filename, initially empty.


new($filename, $mode, $key => $value, ...)

Open and read a dBASE file.

Datum: 20.06.2007-21:40

Beitragre: dbf: Datenreihen anfügen
Seitenanfang
Hallo dash,

ja, wenn du in mein ersten Post schaust, habe ich es auf diese Weise versucht. Dort bekomme ich - sobald ich mit 'new' ein neues Objekt erzeuge und das File einlesen will - die Fehlermeldung "the file xxx.dbf doesn't seem to be a dbfIII file...". Obwohl ich es mit gleichen Modul erstellt habe! Das ist doch merkwürdig...

Daszu irgendwelche Ideen? Greets, larsvegas

Datum: 21.06.2007-09:34

Beitragre: dbf: Datenreihen anfügen
Seitenanfang
Hallo,

um dieses Theman mal zum Ende zu bringen: Ein entscheidender Punkt der der Nutzung dieses Moduls ist das Mode-Argument bei der Erzeugung eines neuen Objektes. Manchmal steht man ja mächtig auf dem Schlauch, und so habe ich folgenden Hinweis mehr oder weniger überlesen.
"The optional mode parameter defaults to r for read-only. If you plan to alter the DBF, open it as r+." Tja, im read-only Mode schreibt es sich schlecht, um nicht zu sagen gar nicht. Viel wichtiger ist aber noch ein weiterer Punkt. Bei der Generierung des DBF ist streng auf die Felddeklaration und vor allem -länge zu achten. Z.B. funktioniert in meinem Fall


...
{name=>'X',
type=>'N', length=>9, decimals=>2},
{name=>'Y',
type=>'N', length=>9, decimals=>2},

aber

{name=>'X',
type=>'N', length=>10, decimals=>2},
{name=>'Y',
type=>'N', length=>10, decimals=>2},

wiederum nicht. Liegt eigentlich auch auf der Hand, wenn man 7 Vorkommastellen hat und zwei Dezimalstellen deklariert, dass die Gesamtlänge nicht 10 sein kann. Manchmal sieht man den Wald vor lauter Bäumen nicht, oder wie war das??

Mannmannmann, larsvegas

Datum: 21.06.2007-11:29

-






-
-