Revision 24475075
Von Holger Lindemann vor mehr als 15 Jahren hinzugefügt
lxo-import/blz.php | ||
---|---|---|
22 | 22 |
} |
23 | 23 |
require ("import_lib.php"); |
24 | 24 |
|
25 |
function l2u($str) { |
|
26 |
return iconv("ISO-8859-1", "UTF-8",$str); |
|
27 |
} |
|
28 |
|
|
25 | 29 |
if (!anmelden()) ende(5); |
26 | 30 |
/* get DB instance */ |
27 | 31 |
$db=$_SESSION["db"]; //new myDB($login); |
... | ... | |
29 | 33 |
|
30 | 34 |
/* display help */ |
31 | 35 |
if ($_POST["ok"]=="Hilfe") { |
32 |
echo "Importfelder:<br>"; |
|
33 |
echo "Feldname => Bedeutung<br>"; |
|
34 |
foreach($parts as $key=>$val) { |
|
35 |
echo "$key => $val<br>"; |
|
36 |
} |
|
37 | 36 |
echo "<br>Die erste Zeile enthält keine Feldnamen der Daten.<br>"; |
38 | 37 |
echo "Die Datenfelder haben eine feste Breite.<br><br>"; |
39 | 38 |
echo "Die Daten können hier bezogen werden:<br>"; |
... | ... | |
62 | 61 |
|
63 | 62 |
$sqlins="INSERT INTO blz_data (blz,fuehrend,bezeichnung,plz,ort,kurzbez,pan,bic,pzbm,nummer,aekz,bl,folgeblz) "; |
64 | 63 |
$sqlins.="VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s',%d,'%s','%s','%s')"; |
65 |
$sqldel="delete from blz"; |
|
64 |
$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"; |
|
65 |
$sqldel="delete from blz_data"; |
|
66 | 66 |
$ok="true"; |
67 |
$cnt=0; |
|
67 | 68 |
$f=fopen("blz.txt","r"); |
68 |
if ($test) echo "Testdurchlauf <br>"; |
|
69 |
if ($test) echo "Testdurchlauf <br><table>\n";
|
|
69 | 70 |
$i=0; |
71 |
$start=time(); |
|
72 |
$rs = $db->getAll("SELECT current_setting('server_encoding')"); |
|
73 |
$srvencoding = $rs[0]['current_setting']; |
|
74 |
$rs = $db->getAll("SELECT current_setting('client_encoding')"); |
|
75 |
$cliencoding = $rs[0]['current_setting']; |
|
76 |
echo "SRV: $srvencoding - - CLI: $cliencoding<br>"; |
|
77 |
//Datenfile ist immer Latin!! |
|
78 |
//zwei Möglichkeiten der Zeichenwandlung. Was ist besser?? |
|
70 | 79 |
if ($f) { |
71 |
if (!$test) $rc=$db->query("BEGIN"); |
|
80 |
//Cliententcoding nicht umstellen: |
|
81 |
//if (!$test) { $rc=$db->query("BEGIN");}; |
|
82 |
//Cliententcoding auf Latin: |
|
83 |
if (!$test) { $rc=$db->query("BEGIN"); if ($cliencoding=="UTF8") $db->query("SET CLIENT_ENCODING TO 'latin-9'"); }; |
|
72 | 84 |
if (!$test) $rc=$db->query($sqldel); |
73 | 85 |
while (($zeile=fgets($f,256)) != FALSE) { |
74 |
$sql=sprintf($sqlins,substr($zeile,0,8),substr($zeile,8,1),substr($zeile,9,58),substr($zeile,67,5), |
|
86 |
$cnt++; |
|
87 |
if (!$test) { |
|
88 |
//Client nicht umgestellt, Zeichen wandeln |
|
89 |
/*$sql=sprintf($sqlins,substr($zeile,0,8),substr($zeile,8,1),l2u(substr($zeile,9,58)),substr($zeile,67,5), |
|
90 |
l2u(substr($zeile,72,35)),l2u(substr($zeile,107,27)),substr($zeile,134,5),substr($zeile,139,11), |
|
91 |
substr($zeile,150,2),substr($zeile,152,6),substr($zeile,158,1),substr($zeile,159,1), |
|
92 |
substr($zeile,160,8));*/ |
|
93 |
//Client umgestellt + und auch bei nicht UTF-Client: |
|
94 |
$sql=sprintf($sqlins,substr($zeile,0,8),substr($zeile,8,1),substr($zeile,9,58),substr($zeile,67,5), |
|
75 | 95 |
substr($zeile,72,35),substr($zeile,107,27),substr($zeile,134,5),substr($zeile,139,11), |
76 | 96 |
substr($zeile,150,2),substr($zeile,152,6),substr($zeile,158,1),substr($zeile,159,1), |
77 | 97 |
substr($zeile,160,8)); |
78 |
if (!$test) $rc=$db->query($sql); |
|
79 |
if ($test) $rc=true; |
|
80 |
echo $rc; |
|
98 |
$rc=$db->query($sql); |
|
99 |
if ($cnt % 10 == 0) { |
|
100 |
if ($cnt % 1000 == 0) { $x=time()-$start; echo sprintf("%dsec %6d<br>",$x,$cnt); } |
|
101 |
else if ($cnt % 100 == 0) { echo "!"; } |
|
102 |
else { echo '.'; } |
|
103 |
flush(); |
|
104 |
} |
|
105 |
} else { |
|
106 |
echo sprintf($teststr,substr($zeile,0,8),substr($zeile,8,1),l2u(substr($zeile,9,58)),substr($zeile,67,5), |
|
107 |
l2u(substr($zeile,72,35)),l2u(substr($zeile,107,27)),substr($zeile,134,5),substr($zeile,139,11), |
|
108 |
substr($zeile,150,2),substr($zeile,152,6),substr($zeile,158,1),substr($zeile,159,1), |
|
109 |
substr($zeile,160,8)); |
|
110 |
$rc=true; |
|
111 |
} |
|
81 | 112 |
if (!$rc) { |
82 | 113 |
$ok=false; |
83 | 114 |
break; |
... | ... | |
86 | 117 |
} |
87 | 118 |
if ($ok) { |
88 | 119 |
$rc=$db->query("COMMIT"); |
89 |
echo "$i Daten erfolgreich importiert"; |
|
120 |
echo "<br>$i Daten erfolgreich importierti<br>"; |
|
121 |
if ($cliencoding=="UTF8") $db->query("SET CLIENT_ENCODING TO 'UTF8'"); |
|
122 |
$stop=time(); |
|
123 |
echo $stop-$start." Sekunden"; |
|
90 | 124 |
} else { |
91 | 125 |
$rc=$db->query("ROLLBACK"); |
92 | 126 |
ende(6); |
... | ... | |
94 | 128 |
} else { |
95 | 129 |
ende(4); |
96 | 130 |
} |
131 |
echo "</table>"; |
|
97 | 132 |
} else { |
98 | 133 |
?> |
99 | 134 |
|
Auch abrufbar als: Unified diff
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.