Freitag, 17. September 2010

DBF - Dateien erstellen/bearbeiten Teil 2

Unter http://php.net/manual/de/ref.dbase.php habe ich den folgenden Code gefunden:



function get_dbf_header($dbfname) {
$fdbf = fopen($dbfname,'r');

$dbfhdrarr = array();
$buff32 = array();
$i = 1;
$goon = true;

while ($goon) {
if (!feof($fdbf)) {
$buff32 = fread($fdbf,32);
if ($i > 1) {
if (substr($buff32,0,1) == chr(13)) {
$goon = false;
} else {
$pos = strpos(substr($buff32,0,10),chr(0));
$pos = ($pos == 0?10:$pos);

$fieldname = substr($buff32,0,$pos);
$fieldtype = substr($buff32,11,1);
$fieldlen = ord(substr($buff32,16,1));
$fielddec = ord(substr($buff32,17,1));

array_push($dbfhdrarr, array($fieldname,$fieldtype,$fieldlen,$fielddec));

}
}
$i++;
} else {
$goon = false;
}
}

fclose($fdbf);
return($dbfhdrarr);
}

$arr = get_dbf_header('/data/file.dbf');
print_r($arr);
?>



nachdem auslesen der Header zeilen habe ich mir den rest in einem weiteren feld des Arrays erstellt.

$rest=$buff32.fread($fdbf, filesize($dbfname));
$dbfhdrarr[]=$rest;

nun kann man mit etwas String bearbeitung und einer Foreach schleife jedes Feld ändern.

Filename ist der Name der Originalen dbf-Datei.
Hier der komplette Code:


function get_dbf_header($dbfname) {
$fdbf = fopen($dbfname,'r');

$dbfhdrarr = array();
$buff32 = array();
$i = 1;
$j = 2;
if ($fdbf) $goon = true;

while ($goon)
{
if (!feof($fdbf))
{
$buff32 = fread($fdbf,32);
if ($i > 1)
{
if (substr($buff32,0,1) == chr(13))
{
$goon = false;
} else
{
$pos = strpos(substr($buff32,0,10),chr(0));
$pos = ($pos == 0?10:$pos);

$fieldname = substr($buff32,0,$pos);
$fieldtype = substr($buff32,11,1);
$fieldlen = ord(substr($buff32,16,1));
$fielddec = ord(substr($buff32,17,1));

array_push($dbfhdrarr, array('feldname'=>$fieldname,'feldtyp'=>$fieldtype,'feldlang'=>$fieldlen,'felddec'=>$fielddec));

}
}
else
{
$anfang=$buff32;
}
$i++;
} else {
$goon = false;
}
}
$rest=$buff32.fread($fdbf, filesize($dbfname));
$dbfhdrarr[]=$rest;

fclose($fdbf);
return($dbfhdrarr);
}

function GetRealSize($file) {
// Return size in Mb
clearstatcache();
$INT = 4294967295;//2147483647+2147483647+1;
$size = filesize($file);
$fp = fopen($file, 'r');
fseek($fp, 0, SEEK_END);
if (ftell($fp)==0) $size += $INT;
fclose($fp);
if ($size<0) $size += $INT;
return $size;
}

//-------------------------------------------------
//Werte Auslesen und Anpassen
//-------------------------------------------------


$arr = get_dbf_header($filevalue['filename']); //Kopfzeilen der DBF Auslesen
$rest=$arr[$filevalue['werteindex']]; //Werte der Zellen stehen in array Index 164




if (substr($rest,0,2)!=(chr(13).chr(32)))
{
$rest=chr(13).chr(32).substr($rest,265);
}


$speichern=chr(13).chr(32);//Zeilenumbruch und Leerzeichen vor erstem Datensatz
foreach ($arr as $key=>$value)
{
if (0==$key)
{
$wert=trim(substr($rest,2,($value['feldlang'])-2)); //Wert holen
$rest=substr($rest,($value['feldlang']+2)); //Restlichen String kürzen
}
else
{
$wert=trim(substr($rest,0,$value['feldlang'])); //Wert holen
$rest=substr($rest,$value['feldlang']); //Restlichen String kürzen
}
switch ($key)
{
case 0: $wert=''; //
break;
case 1: $wert=date('dmY'); //Datum
break;
case 2:
break;
case 3:
case 4:
}
}

Mittwoch, 15. September 2010

DBF - Dateien erstellen/bearbeiten

Eine DBF-Datei zu ertsellen ist nicht ganz einfach. Da es sich bei DBF (Foxpro etc.) um eine Binäre-Datei handelt kann man Sie nur schlecht mit einem Text-Editor bearbeiten/erstellen.

Mit etwas Übung kann man sie mit einem Hexeditor ändern. Dazu sollte man aber mit dem Aufbau vertraut sein. Eine gute Beschreibung zu dem Aufbau habe ich unter http://www.dbf2002.com/dbf-file-format.html gefunden.

Um neue DBF Dateien zu erstellen habe ich den einfachen weg gewählt und den Header einer bereits vorhandenen Datei kopiert. Hierdurch sind aber alle Felder genauso definiert wie im Original.

Dienstag, 27. Juli 2010

Wohnungs Inventar

Wer kennt das nicht man will umziehen und fängt an zu überlegen was für ein Fahrzeug brauche ich? Bei Pepp-Umzug gibt es ein Tool zum Angebot erstellen lassen - wenn man alles eingibt sieht man nachher im Bereich Abstimmung wie viele Umzugskartons man braucht und was an Volumen berechnet wurde (unter Lagerung).

Wenn man weiß wie groß die Ladfläche von einem Fahrzeug ist, kann man nun ausrechnen wie oft man fahren muß.

Ein 3,5Tonnen Bus hat ca. 12qbm.

Umzugspreisrechner