blz.txt kommt im latin. darf nicht gewandelt werden, da sonst die bytegenaue breite...
authorHolger Lindemann <hli@lx-system.de>
Fri, 13 Mar 2009 07:46:57 +0000 (07:46 +0000)
committerHolger Lindemann <hli@lx-system.de>
Fri, 13 Mar 2009 07:46:57 +0000 (07:46 +0000)
db fragen welche codierung vorhanden und ggf. client auf latin umstellen für den import.

lxo-import/blz.php

index 86639be..506ae39 100644 (file)
@@ -22,6 +22,10 @@ if (!$_SESSION["db"]) {
 }
 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);
@@ -29,11 +33,6 @@ $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>";
@@ -62,22 +61,54 @@ if ($_POST["ok"]=="Hilfe") {
 
        $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;
@@ -86,7 +117,10 @@ if ($_POST["ok"]=="Hilfe") {
                }
                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);
@@ -94,6 +128,7 @@ if ($_POST["ok"]=="Hilfe") {
        } else {
                ende(4);
        }
+       echo "</table>";
 } else {
 ?>