commit 24475075172336ae3300c48ec146f9fdb9127886
Author: Holger Lindemann <hli@lx-system.de>
Date:   Fri Mar 13 07:46:57 2009 +0000

    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.

diff --git a/lxo-import/blz.php b/lxo-import/blz.php
index 86639be23..506ae393e 100644
--- a/lxo-import/blz.php
+++ b/lxo-import/blz.php
@@ -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 {
 ?>
 
