Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 24475075

Von Holger Lindemann vor etwa 16 Jahren hinzugefügt

  • ID 24475075172336ae3300c48ec146f9fdb9127886
  • Vorgänger c9fe9e1c
  • Nachfolger 247a0189

blz.txt kommt im latin. darf nicht gewandelt werden, da sonst die bytegenaue breite nicht gewährleistet wird.
db fragen welche codierung vorhanden und ggf. client auf latin umstellen für den import.

Unterschiede anzeigen:

lxo-import/blz.php
}
require ("import_lib.php");
function l2u($str) {
return iconv("ISO-8859-1", "UTF-8",$str);
}
if (!anmelden()) ende(5);
/* get DB instance */
$db=$_SESSION["db"]; //new myDB($login);
......
/* display help */
if ($_POST["ok"]=="Hilfe") {
echo "Importfelder:<br>";
echo "Feldname => Bedeutung<br>";
foreach($parts as $key=>$val) {
echo "$key => $val<br>";
}
echo "<br>Die erste Zeile enth&auml;lt keine Feldnamen der Daten.<br>";
echo "Die Datenfelder haben eine feste Breite.<br><br>";
echo "Die Daten k&ouml;nnen hier bezogen werden:<br>";
......
$sqlins="INSERT INTO blz_data (blz,fuehrend,bezeichnung,plz,ort,kurzbez,pan,bic,pzbm,nummer,aekz,bl,folgeblz) ";
$sqlins.="VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s',%d,'%s','%s','%s')";
$sqldel="delete from blz";
$teststr="<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%s</td><td>%s</td></tr>\n";
$sqldel="delete from blz_data";
$ok="true";
$cnt=0;
$f=fopen("blz.txt","r");
if ($test) echo "Testdurchlauf <br>";
if ($test) echo "Testdurchlauf <br><table>\n";
$i=0;
$start=time();
$rs = $db->getAll("SELECT current_setting('server_encoding')");
$srvencoding = $rs[0]['current_setting'];
$rs = $db->getAll("SELECT current_setting('client_encoding')");
$cliencoding = $rs[0]['current_setting'];
echo "SRV: $srvencoding - - CLI: $cliencoding<br>";
//Datenfile ist immer Latin!!
//zwei Möglichkeiten der Zeichenwandlung. Was ist besser??
if ($f) {
if (!$test) $rc=$db->query("BEGIN");
//Cliententcoding nicht umstellen:
//if (!$test) { $rc=$db->query("BEGIN");};
//Cliententcoding auf Latin:
if (!$test) { $rc=$db->query("BEGIN"); if ($cliencoding=="UTF8") $db->query("SET CLIENT_ENCODING TO 'latin-9'"); };
if (!$test) $rc=$db->query($sqldel);
while (($zeile=fgets($f,256)) != FALSE) {
$sql=sprintf($sqlins,substr($zeile,0,8),substr($zeile,8,1),substr($zeile,9,58),substr($zeile,67,5),
$cnt++;
if (!$test) {
//Client nicht umgestellt, Zeichen wandeln
/*$sql=sprintf($sqlins,substr($zeile,0,8),substr($zeile,8,1),l2u(substr($zeile,9,58)),substr($zeile,67,5),
l2u(substr($zeile,72,35)),l2u(substr($zeile,107,27)),substr($zeile,134,5),substr($zeile,139,11),
substr($zeile,150,2),substr($zeile,152,6),substr($zeile,158,1),substr($zeile,159,1),
substr($zeile,160,8));*/
//Client umgestellt + und auch bei nicht UTF-Client:
$sql=sprintf($sqlins,substr($zeile,0,8),substr($zeile,8,1),substr($zeile,9,58),substr($zeile,67,5),
substr($zeile,72,35),substr($zeile,107,27),substr($zeile,134,5),substr($zeile,139,11),
substr($zeile,150,2),substr($zeile,152,6),substr($zeile,158,1),substr($zeile,159,1),
substr($zeile,160,8));
if (!$test) $rc=$db->query($sql);
if ($test) $rc=true;
echo $rc;
$rc=$db->query($sql);
if ($cnt % 10 == 0) {
if ($cnt % 1000 == 0) { $x=time()-$start; echo sprintf("%dsec %6d<br>",$x,$cnt); }
else if ($cnt % 100 == 0) { echo "!"; }
else { echo '.'; }
flush();
}
} else {
echo sprintf($teststr,substr($zeile,0,8),substr($zeile,8,1),l2u(substr($zeile,9,58)),substr($zeile,67,5),
l2u(substr($zeile,72,35)),l2u(substr($zeile,107,27)),substr($zeile,134,5),substr($zeile,139,11),
substr($zeile,150,2),substr($zeile,152,6),substr($zeile,158,1),substr($zeile,159,1),
substr($zeile,160,8));
$rc=true;
}
if (!$rc) {
$ok=false;
break;
......
}
if ($ok) {
$rc=$db->query("COMMIT");
echo "$i Daten erfolgreich importiert";
echo "<br>$i Daten erfolgreich importierti<br>";
if ($cliencoding=="UTF8") $db->query("SET CLIENT_ENCODING TO 'UTF8'");
$stop=time();
echo $stop-$start." Sekunden";
} else {
$rc=$db->query("ROLLBACK");
ende(6);
......
} else {
ende(4);
}
echo "</table>";
} else {
?>

Auch abrufbar als: Unified diff