lettura da file e tabulazione

mano

Nuovo Utente
3 Lug 2008
23
0
0
ciao,

vorrei capire come scrivere un codice corretto per leggere del testo e inserirlo in variabili/array/tabelle/database.

nello specifico ho il seguente problema.

leggo da file di testo dei dati tabulati con spazi. vorrei leggere tali dati ed inserirli nelle rispettive colonne di un database.

il testo è formato dai seguenti dati strutturati in tabella:

oggetto 1 X 4 (100 udm) for $1,200,000 luogo 1
oggetto 2 X 100 (1 udm) for $1,000 luogo 1
oggetto 3 X 2,053 (10 udm) for $24,000 luogo 2
...ecc...

le righe del DB saranno le seguenti:
ITEM QTY COST PLACE

per cui un esempio di raccolta dei dati è:
ITEM = oggetto 1
QTY = 4 (100 udm)
COST = 1,200,000
PLACE = luogo 1

fondamentalmente, la riga ITEM può essere un qualsiasi testo con numeri che precedono e seguono, anche separati da punti (es. "1.0 schermo"): in questo caso il separatore di colonna è lo spazio che segue o la X.

la riga QTY deve essere tutto ciò che segue la "X" (quindi x esclusa) e precede il "for".

la riga COST deve essere tutto ciò che segue il simbolo del "$" e precede lo spazio.

infine la riga place è l'ultimo testo che segue il numero COST. nota che strutturalmente è fatto come ITEM, cioè può contenere testo e numeri ma non si sa in che punto esatto della stringa...

ho dato un'occhiata alle espressioni regolari, ma non riesco a contestualizzarle nel mio problema, e non so se possano essere utilizzate in questo caso.

qualcuno ha qualche idea su come procedere?
grazie.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
secondo me è un lavoro un po’lunghetto.
inoltre come sono suddivise le varie righe con CR o LF e tra una parola e l’altra c’è uno spazio solo?
io farei così

$riga = explode(chr(13), $testo); // se LF chr(10)
Per cui in
$riga[0] ho oggetto 1 X 4 (100 udm) for $1,200,000 luogo 1
$riga[1] ho oggetto 2 X 100 (1 udm) for $1,000 luogo 1
…ecc..

Prendo la riga 0 e la esplodo per spazio
$parte=explode(“ “,$riga[0]);
per cui avrò
$parte[0] = oggetto
$parte[1] = 1
$parte[2] = X
$parte[3] = 4 poi non so se tra 4 e ( c’è uno spazio
$parte[3]= ( oppure se tra ( e 100 c’è uno spazio
Se non c’è $parte[3]= (100
$parte[4]=udm se spazio oppure $parte[4]=udm)
$parte[5]=for
$parte[6]= $1,200,000 se non c’e spazio tr $ e cifra
Elimini $ con str_replace(“$”,””,$parte[6]);
$parte[7]=luogo
$parte[8]=1

A questo punto ricostruisci utilizzando quello che ti serve

$ITEM=$parte[0].” “.$parte[1];
ecc.. utilizzando quello che ti serve

Carichi in DB e riparti con la riga[1]

Tutto dipende comunque da come sono suddivise le varie righe e se tra le parole c'è uno o più spazi
Forse c’è qualche sistema migliore, ma a me è venuto in mente questo
 

mano

Nuovo Utente
3 Lug 2008
23
0
0
potrebbe funzionare, borgo italia. gli spazi in genere sono fissi. il problema sono i nomi dell'oggetto e del luogo. infatti per quanto riguarda gli oggetti ci può essere un numero che precede e l'oggetto è costituito da due nomi.

per es.: "1.0 schermo lcd"

penso che in quel caso il vero limitatore sia la "X".
facendo nel tuo modo, potrei effettivamente dividere la riga in:
$word[0] = "1.0";
$word[1] = "schermo";
$word[2] = "lcd";
$word[3] = "X";

però nel ricostruirla, come faccio a dirgli di unire tutte le stringhe $word[] fino a quella contenente "X" ?

potrei fare così?

for ( $i = 0; $i < sizeof($word) ; $i++){
while ($word[$i]!="X"){
$pezzi[$i] = $word[$i];
}
}

$ITEM = implode (" ",$pezzi);
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
potresti

dopo aver esploso la riga con CR o LF

$dueParti=explode("X", $riga[0]);
in $dueParti[0] dovresti trovarti l'oggetto (eventualmente usa anche trim())

in $dueParti[1] tutto il resto da trattare come gia indicato

salvi in DB e poi riparti da $riga[1]..ecc..;

questo se hai una sola X per riga
 

mano

Nuovo Utente
3 Lug 2008
23
0
0
si, di X ne una sola. potrei fare una serie sequenziale di explode:

la prima con X e mi ritrovo l'oggetto e il resto, poi esplodo il resto con il for per trovarmi la quantità, poi con lo spazio per trovarmi il prezzo e il luogo...

ora provo. se funzia ti faccio sapere.

intanto, grazie per le dritte ;)
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
un'altra soluzione potrebbe essere creare un CSV dal file di testo e importarlo con un LOAD DATA
 

mano

Nuovo Utente
3 Lug 2008
23
0
0
be', in teoria i dati posso tranquillamente importarli in excel...

come potrei usare load data? non conosco questa funzione...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
cia avatar deminiaco
la cosa interessa anche me
ma se faccio il CSV (se non erro usa le virgole come separatore?)
ed ho es come detto da mano:
"1.0 schermo lcd"
e
"pincopallo lcd"

nel primo caso ho tre campi (?) nel secondo 2?
 

mano

Nuovo Utente
3 Lug 2008
23
0
0
per ora ho risolto in modo diciamo poco ortodosso, modificando il file da analizzare inserendo come elemento di tabulazione un asterisco *. poi con lo script esplodo rispetto all'asterisco.

con i files csv, non c'è modo di specificare l'elemento di tabulazione?
perchè alla fine, anche le parole composte (che si trovano nel file da analizzare) con spazi e virgole, rientrano in un'unica colonna. mi spiego meglio:

COLONNA1 - COLONNA2 - ...
1.0 schermo LCD - 10 elementi - ...

per cui se si potesse usare nel csv un elemento diverso dalla virgola (perchè è usata come indicatore delle migliaia nei costi) sarei a cavallo... :)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
proprio ieri ho caricato 8880 indirizzi e mail che avevo su excel nel db per news.
io ho fatto così:
1.copiata colonne excel in word
2. in word convertito tabella in testo delimita con *
3. sostituito ^p con *
4. copia incolla in campo form e salva
5. $campi=explode("*", $testo_da_form);
nello script ho calcolato grandezza di $campi[] da cui sapendo quanti campi ho nella tab del DB
$incremento=$grand_campi / $num_campi_tab;// es per tre campi

for ($k=0, $k<$incremento; $k=$k+3){
$q="INSERT INTO tabella c1, c1,c3 VALUE ($cami[$k], $campi[$k+1], $campi[$k+2];
..........
}

tutto è andato a buon fine, con 10 minuti di lavoro
:byebye:
 
Discussioni simili
Autore Titolo Forum Risposte Data
F LETTURA FILE SU DIRECTORY IN RETE Javascript 0
Gabriele15497514 php testo errato durante la lettura del file txt quando lo script viene eseguito contemporaneamente PHP 3
M Non corretta lettura del file php.ini della sezione CLI PHP 3
P [Javascript] Array da file di testo, con lettura temporizzata senza refresh Javascript 3
O [Java] Lettura da JSON File Java 0
A App inventor Lettura file di testo e ceazione listpicker Sviluppo app per Android 0
M Lettura file esterno via ajax jQuery 3
J [Javascript] Lettura file di testo (.txt) Javascript 1
R Accesso Multiutente a file in lettura/scrittura PHP 5
Emix Lettura file XML PHP 1
R Lettura file di testo (file in locale) Javascript 0
A lettura file Java 2
R lettura dati in tempo reale da file di testo PHP 2
V scrittura lettura su file PHP 2
M Lettura file di testo sequenziale ... Javascript 1
X Php + xml funzioni per lettura file Xml PHP 5
P Lettura dati se corretti scrivo su file.txt PHP 2
micio86 Lettura file remoti PHP 0
D caricamento e lettura file con revisione PHP 4
SolidSnake4 Problemi lettura file csv PHP 5
S Consiglio sito web per lettura di un file di testo che si aggiorna ogni secondo Javascript 9
F Lettura automatica di un file PHP 2
LaKanka Problema lettura file feed xml PHP 2
A [Java] J2ME(NetBeans) lettura dati file txt Java 5
S Lettura dati da un file esterno Flash 0
M Lettura file XML PHP 6
R lettura file rtf con testo colorato e stampa a video PHP 1
E Problema con la lettura di un file di testo Classic ASP 3
F problema php scrittura e lettura file PHP 2
Z problema lettura/scritture file txt PHP 11
mptech problemi lettura file pdf PHP 0
M java lettura scrittura file con j2me Java 0
D lettura file fino al carattere scelto ! PHP 1
P refresh div + scrittura/lettura dal db Javascript 1
F Lettura "input number" dinamico PHP 4
E Errore di lettura php in html PHP 8
E lettura da un Database con Javascript jQuery 2
G lettura stringa alfanumerica MySQL 0
D Lettura output da json su php PHP 4
max1974 Lettura Risultato $.ajax Javascript 1
R javascript lettura css cross-browser Javascript 1
Zio Crick Windows 8.1 accede ai NAS solo in lettura Windows e Software 0
T php Lettura files contenuti in una cartella PHP 1
M [PHP] Checkbox: inserimento nel db e lettura dal db PHP 20
M Come rendere solo lettura campo textarea PHP 2
M errore lettura data nel mysql con funzione Where PHP 1
I estensioni del server di Frontpage e lettura database Classic ASP 18
Recover db in sola lettura su area riservata WordPress 1
C PHP lettura db Access PHP 0
P Problema con lettura filesystem del client da server! Upload multiplo foto. PHP 5

Discussioni simili