Import TXT con campi a lunghezza fissa

spike87bar

Nuovo Utente
18 Set 2012
3
0
1
Ciao a tutti, ho un problemino con un import di un TXT a lunghezza fissa, della serie non sò neanche da dove iniziare :crying: :

Il caso è questo:

ho un tracciato in txt dove sono presenti i dati delimitati con lunghezza nota.

per esempio:

@@FE00003415362812403USA .....

sò che

@@ - TESTO (02).
CODICE FAMIGLIA - TESTO (09).
CODICE TERRITORIO ESTERO DI RESIDENZA - TESTO (03).
CODICE CONSOLATO DI RESIDENZA - TESTO (07).
PROVINCIA CONTEA - TESTO (28).
....

il fatto è che non saprei come inserirli in una tabella SQL precedentemente creata.

Vi ringrazio per la collaborazione.... =)
 
ciao
prima di risponderti (o almeno cercare) virrei una precisazione su quello che hai scritto
@@FE00003415362812403USA .....

@@ - TESTO (02).
CODICE FAMIGLIA - TESTO (09).
CODICE TERRITORIO ESTERO DI RESIDENZA - TESTO (03).
CODICE CONSOLATO DI RESIDENZA - TESTO (07).
PROVINCIA CONTEA - TESTO (28).
corrisponde a

testo=> @@ //ma queste ti servono nel db?
codice famiglia=> FE0000341
codice territorio estero di residenza=> 536
codice consolato di residenza=> 2812403
provincia contea=> USA ..... //di 28 caratteri

è così?

edit, dimenticavo
il txt è così a parte quello detto sopra
@@FE00003415362812403USA .....
@@PS00002333112022873FRA .....
@@TS12324567889555664SPA ..... eccetera
 
Ultima modifica:
ciao
prima di risponderti (o almeno cercare) virrei una precisazione su quello che hai scritto

corrisponde a

testo=> @@ //ma queste ti servono nel db?
codice famiglia=> FE0000341
codice territorio estero di residenza=> 536
codice consolato di residenza=> 2812403
provincia contea=> USA ..... //di 28 caratteri

è così?

edit, dimenticavo
il txt è così a parte quello detto sopra
@@FE00003415362812403USA .....
@@PS00002333112022873FRA .....
@@TS12324567889555664SPA ..... eccetera


Ehila...=) a parte i caratteri @@ che potrei anche non importarli, il resto è tutto come hai indicato come pure tutte le righe successive... =)
 
Ultima modifica:
ciao
quindi i caratteri @@ servono solo per dividere le parti giusto?
se è così prova (al massimo non funzia)
PHP:
<?php
$testo_iniziale="@@FE00003415362812403USA ...@@PS00.....@@TS12324......";//qui metterai il tuo txt (come dovresti saperlo)
$testi=explode("@@",$testo_iniziale);
/*ottieni un array del tipo
$testi[0]="FE00........";
$testi[1]="PS00........";
$testi[2]="TS12........";
ecc........
*/
//poi se sai le varie lunghezze e a cosa si riferiscono le parti potresti costrurti un array
$lungo=array("cod_fam"=>9,"cod_ter"=>3,"cod_con"=>7,"prov_con"=>28);
$text_splitt=array();//array d'appoggio
//cicli l'array $testi
for($k=0; $k < count($testi); $k++){
	$partenza=0;//ad ogni ciclo di $k rparte da zero
	//
	foreach($lungo as $chiave => $lunghezza){
		$text_splitt[$k][$chiave]=substr($testi[$k],$partenza,$lunghezza);
		$partenza+=$lunghezza;//sposto la partenza
	}
}
/* ottieni un arrya del tipo
$text_splitt[0]['cod_fam'] => FE0000341
$text_splitt[0]['cod_ter'] => 536
$text_splitt[0]['cod_con'] => 62812403
$text_splitt[0]['prov_con'] => USA ...
$text_splitt[1]['cod_fam'] => PS00..
...
...
...
$text_splitt[2]['cod_fam'] => TS12324...
eccetera.....
*/
/* ****TEST DI PROVA**** */
for($k=0; $k < count($testi); $k++){
	echo "record id= ".($k+1)."<br>";
	foreach($text_splitt[$k] as $campo => $valore){
		echo "&nbsp;&nbsp;&nbsp;campo[$campo] => $valore<br>";
	}
	echo "<br>";
}
//se quanto ottieni è quello che vuoi farai l'insert nella tabella
?>
provalo e sappimi dire (qualche erroretto c'è scappato di sicuro)
l'unico problema è che devi essere SICURISSIMO della lunghezza dei vari spezzoni e che sia sempre la stessa per ciascun spezzone
 
ciao
eccolo qua l'erroretto, mi ero dimenticato che quando c'è un separatore (@@) anche all'inizio il primo elemento della'array è vuoto
per cui correggi i due for
PHP:
for($k=0; $k < count($testi); $k++){
in
PHP:
for($k=1; $k <= count($testi); $k++){
e di conseguenza (ma è solo una quisquiglia)
la riga
PHP:
echo "record id= ".($k+1)."<br>";
in
PHP:
echo "record id= $k<br>";

cioè l'array che ottieni è
$testi[0]="";
$testi[1]="FE00........";
$testi[2]="PS00........";
$testi[3]="TS12........";
.......
 
Ultima modifica:
ciao
eccolo qua l'erroretto, mi ero dimenticato che quando c'è un separatore (@@) anche all'inizio il primo elemento della'array è vuoto
per cui correggi i due for
PHP:
for($k=0; $k < count($testi); $k++){
in
PHP:
for($k=1; $k <= count($testi); $k++){
e di conseguenza (ma è solo una quisquiglia)
la riga
PHP:
echo "record id= ".($k+1)."<br>";
in
PHP:
echo "record id= $k<br>";

cioè l'array che ottieni è
$testi[0]="";
$testi[1]="FE00........";
$testi[2]="PS00........";
$testi[3]="TS12........";
.......

Un genio a prescindere .... =) appena riesco la provo e ti faccio sapere... grazie mille!!
 

Discussioni simili