Condividi:        

Automatizzare estrazioni da .txt

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Automatizzare estrazioni da .txt

Postdi Gattuccio0 » 01/04/10 23:18

Ciao a tutti. Mi sono ritrovato in mano un vecchio DB (era un DB3) di cui mi rimangono solamente le esportazioni in .txt (in quanto il vecchio programma già non girava più su versioni rpecedenti a XP).

Volendo riportare tutti i dati contenuti nei vari documenti dovrei creare una macro che mi ottimizzi i files e che mi faccia una tabulazione.

I files hanno tutti la stessa intestazione (occupa circa 38 righe) ed i contuni sono variabili da una scheda con un'altra. Vi riporto qui di seguito un esempio (riporto in rosso il testo che dovrei andare ad eliminare:

HOME <index.asp> |Chi siamo <chi.asp> | Servizi <servizi.asp> | News
<news_x.asp> |Links RP <links_rp.asp>|ci Hanno scelto <clienti.asp> |
Per abbonarsi <abbonarsi.asp> | Contatti <contatti.asp> | Login
<login.asp>| Faq <faq.asp>



ricerca per

Testata

Cognome



Regione

Area





* Attenzione Non hai scelto una Lista,*

* puoi solo visionare il database *

*ma non puoi salvare.*

Nuova Lista <areariservata_media.asp>








XXXXXXX | http://www.xxxx.it <http://www.xxxx.it>

AMBITO: Nazionale
AREA: Italia
TIPO: Periodico
TEMA: Agricoltura / Ambiente / Animali
PERIODICITA': Bimestrale

INDIRIZZO: Via Xxxxxx, ## - .##### - Xcccccccc (MI)



in lista| tel. | mail | redazione | specializzazione | incarico | nome |
cognome

1 | 54224 [Tel: ## ######### | Fax: ########### |] <#> | invia subito
una e-mail diretta <mailto:xxxxxxxxx@xxxxx.it> | Animali | | Direttore
responsabile | Xxxxx | Xxxxx cerca online Xxxxx +Xxxx
<http://www.123xxxxxx.com/s/Xxxxx +Xxxx>

2 | 54225 [Tel: ## #########| Fax: ########### |] <#> | invia subito
una e-mail diretta <mailto:xxxxxxxxxxxxx@xxxxx.it> | Animali | |
Direttore editoriale | Xxxxxxxx | Xxxxxxx cerca online Xxxxxxx+Xxxxxxx
<http://www.123xxxxxxx.com/s/Xxxxxxx+Xxxxxxx>

3 | 54226 [Tel: ## #########| Fax: ########### |] <#> | invia subito
una e-mail diretta <mailto:xxxxxxxxxxxx@xxxxx.it> | Animali | |
Coordinatore Editoriale | Xxxxxxx | Xxxxxxxx cerca online
Xxxxxxxx+Xxxxxxx <http://www.123xxxxxx.com/s/Xxxxxxxx+Xxxxxxx>

4 | 54227 [Tel: ## #########| Fax:###########|] <#> | invia subito
una e-mail diretta <mailto:xxxxxxxxxxx@xxxxx.it> | Animali | | Art
Director | Xxxxxx | Xxxxxxxx cerca online Xxxxxx+Xxxxxx
<http://www.123xxxxxx.com/s/Xxxxxxxx+Xxxxxx>

* Attenzione Non hai scelto una Lista,*

* puoi solo visionare il database *

*ma non puoi salvare.*



Nuova Lista <areariservata_media.asp>





All Rights Reserved XXXXXX-XX 2008 | http://www.xxxxxx-xx.it









© xxxxxx-xx.it 2008 - | - design xxxxxxx


Una volta eliminati i testi di troppo, dovrei andare ad unire i cintentui di tutti i files in uno unico in quanto poi li dovrei portare in excell.
Vi allego due files a caso (per avere due tipologie di lunghezza di contentui differenti).

http://rapidshare.com/files/37090335678/ffiles.zip.html



Moderato da Flash30005 il 2/04/2010 ore 14:10 - causa pubblicazione indirizzi e nomi reali
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Sponsor
 

Automatizzare estrazioni da .txt in Excel

Postdi Gattuccio0 » 06/04/10 14:50

Riformulo il post:

Ho l'esigenza di esportare dei files .txt in una tabella di Excel.

I files hanno tutti la stessa intestazione (occupa circa 38 righe) ed i contenuti sono variabili da una scheda con un'altra in quanto qualucno può avere un record solo ed altri 20. Vi riporto qui di seguito un esempio (riporto in rosso il testo che dovrei andare ad eliminare):

HOME <index.asp> |Chi siamo <chi.asp> | Servizi <servizi.asp> | News
<news_x.asp> |Links RP <links_rp.asp>|ci Hanno scelto <clienti.asp> |
Per abbonarsi <abbonarsi.asp> | Contatti <contatti.asp> | Login
<login.asp>| Faq <faq.asp>



ricerca per

Testata

Cognome



Regione

Area





* Attenzione Non hai scelto una Lista,*

* puoi solo visionare il database *

*ma non puoi salvare.*

Nuova Lista <areariservata_media.asp>








XXXXXXX | http://www.xxxx.it <http://www.xxxx.it>

AMBITO: Nazionale
AREA: Italia
TIPO: Periodico
TEMA: Agricoltura / Ambiente / Animali
PERIODICITA': Bimestrale

INDIRIZZO: Via Xxxxxx, ## - .##### - Xcccccccc (MI)



in lista| tel. | mail | redazione | specializzazione | incarico | nome |
cognome

1 | 54224 [Tel: ## ######### | Fax: ########### |] <#> | invia subito
una e-mail diretta <mailto:xxxxxxxxx@xxxxx.it> | Animali | | Direttore
responsabile | Xxxxx | Xxxxx cerca online Xxxxx +Xxxx
<http://www.123xxxxxx.com/s/Xxxxx +Xxxx>

2 | 54225 [Tel: ## #########| Fax: ########### |] <#> | invia subito
una e-mail diretta <mailto:xxxxxxxxxxxxx@xxxxx.it> | Animali | |
Direttore editoriale | Xxxxxxxx | Xxxxxxx cerca online Xxxxxxx+Xxxxxxx
<http://www.123xxxxxxx.com/s/Xxxxxxx+Xxxxxxx>

3 | 54226 [Tel: ## #########| Fax: ########### |] <#> | invia subito
una e-mail diretta <mailto:xxxxxxxxxxxx@xxxxx.it> | Animali | |
Coordinatore Editoriale | Xxxxxxx | Xxxxxxxx cerca online
Xxxxxxxx+Xxxxxxx <http://www.123xxxxxx.com/s/Xxxxxxxx+Xxxxxxx>

4 | 54227 [Tel: ## #########| Fax:###########|] <#> | invia subito
una e-mail diretta <mailto:xxxxxxxxxxx@xxxxx.it> | Animali | | Art
Director | Xxxxxx | Xxxxxxxx cerca online Xxxxxx+Xxxxxx
<http://www.123xxxxxx.com/s/Xxxxxxxx+Xxxxxx>

* Attenzione Non hai scelto una Lista,*

* puoi solo visionare il database *

*ma non puoi salvare.*



Nuova Lista <areariservata_media.asp>





All Rights Reserved XXXXXX-XX 2008 | http://www.xxxxxx-xx.it


Vi allego due files in .txt di esempio, ed una sorta di tabella Excel che dovrei realizzare per esportare i dati che mi servono: http://rapidshare.com/files/372673589/file.zip.html
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Automatizzare estrazioni da .txt

Postdi Flash30005 » 07/04/10 13:21

Ciao Gattuccio

Per quanto abbia cercato di fare non riesco a trovare una "coerenza" nel file testo che mi permetta l'importazione dei dati come vorresti.

Quindi o fai modificare il programma che ti fornisce quel file testo oppure penso che la soluzione "sarà dura" ad arrivare...

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Automatizzare estrazioni da .txt

Postdi Gattuccio0 » 07/04/10 14:40

Ciao Flash,
il programma non esiste più (è passato a miglior vita: durante un furto in ufficio hanno preso l'HD che aveva il programmino).
I files che sono in mio possesso sono il back up.

Eventualmente, c'è una mezza soluzione? Ovvero, non arrivare al file in Excel ma almeno creare un'operazione che mi porti a metà percorso:
mi basterebbe riunire in un unico file tutti quelli che ho...poi, per la tabulazione andrò a creare dei comandi che mi semplifichino e mi agevolino spaziature, ecc.
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Automatizzare estrazioni da .txt

Postdi Flash30005 » 07/04/10 22:08

ci sto lavorando dammi solo qualche ora in più
forse un giorno
ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Automatizzare estrazioni da .txt

Postdi Gattuccio0 » 07/04/10 22:37

Tranquillo...nessuna fretta, ci mancherebbe altro...era per arrivare ad un compromesso... :lol:
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Automatizzare estrazioni da .txt

Postdi Flash30005 » 07/04/10 22:50

Intanto per farti stare tranquillo ti invio questa macro che importa solo il file 1.txt
Codice: Seleziona tutto
Public virg, UR, ContaUR, InsR As Integer, riga, campo, M_Riga As String
Sub cercaCampo()
Open "C:\Ricette\File\1.txt" For Input As #1   '<<< cambiare percorso
Passo = 0
UR = 0
Do Until EOF(1)
contaV = 0
     Line Input #1, riga
     If riga = "" Or riga = " " Then GoTo esci
     If Passo = 0 Then
        PRR = 0
        For PR = 1 To Len(riga)
            If Mid(riga, PR, 2) = "ww" Then
                PRR = PRR + 1
                Passo = 1
            End If
        Next PR
        If PRR = 0 Then GoTo esci
     End If
For virg = 1 To Len(riga)
    If Mid(riga, virg, 1) = "[" Then
    Call Prelevacampo
    GoTo SaltaV
    End If
    Next virg
SaltaV:
        'contaV = contaV + 1
        'If contaV = 2 Then
            'Call Prelevacampo
            If Mid(riga, 1, 1) = "*" Or Mid(riga, 1, 5) = "Nuova" Or Mid(riga, 1, 4) = "All " Or Mid(riga, 1, 1) = "Â" Or Mid(riga, 1, 7) = "cognome" Or Mid(riga, 1, 8) = "<http://" Then GoTo esci
            InsR = Range("A1").CurrentRegion.Rows.Count + 1
            riga = Replace(riga, ":", "|")
            riga = Replace(riga, "<http", "")
            riga = Replace(riga, "//", "")
            riga = Replace(riga, ">", "")
            riga = Replace(riga, "e-mail <mailto", "")
            If Mid(riga, 1, 6) = "AMBITO" Then
            End If
            If Mid(riga, Len(riga) - 5, 4) = "nome" Then riga = riga & "cognome"
            If UR = 1 Then
            ContaUR = ContaUR + 1
                M_Riga = M_Riga & riga
                GoTo esci
            End If
            Range("A" & InsR).Value = riga
            'GoTo esci
       ' End If
    'End If

esci:
If ContaUR = 3 Then
Range("A" & InsR).Value = M_Riga
ContaUR = 0
UR = 0
M_Riga = ""
End If
Loop
Close #1
Call TestoInCol
Call CancCerca
End Sub
Sub Prelevacampo()
campo = ""
For virg2 = virg - 6 To Len(riga)
    If Mid(riga, virg2, 1) = "[" Then GoTo esci2
    campo = campo + Mid(riga, virg2, 1)
Next virg2
esci2:

Riga1 = Trim(campo)
campo = ""
For virg2 = virg + 5 To Len(riga)
    If Mid(riga, virg2, 1) = "|" Then GoTo esci3
    campo = campo + Mid(riga, virg2, 1)
Next virg2
esci3:
riga = Riga1 & "|" & Trim(campo)
UR = 1
End Sub

Sub TestoInCol()

    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
        TrailingMinusNumbers:=True
    Range("B2").Select
End Sub
Sub CancCerca()
UR = Range("H" & Rows.Count).End(xlUp).Row
For RR = 1 To UR
StCerca = Range("H" & RR).Value
For StrC = 1 To Len(StCerca)
If Mid(StCerca, StrC, 5) = "cerca" Then
Range("H" & RR).Value = Mid(StCerca, 1, StrC - 2)
GoTo saltac
End If
Next StrC
saltac:
Next RR
End Sub

Ora se riesci da solo devi fare l'elenco dei file della cartella e con un ciclo For... next elaborare tutti i file nella stessa maniera.

Ti informo che il percorso è C:\Ricette\File\ qui metterai i file .txt
Cambia percorso nella macro io ho voluto usare una tua precedente cartella altrimenti la root di C:\ diventa un albero di 300 piani :lol:

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Automatizzare estrazioni da .txt

Postdi Flash30005 » 07/04/10 23:42

Prova questo file
il percorso lo stabilisci modificando la variabile
"Perc" all'inizio della macro "ACercaCampo"

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Automatizzare estrazioni da .txt

Postdi Gattuccio0 » 08/04/10 09:48

ok, questa sera da casa ci provo!
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Automatizzare estrazioni da .txt

Postdi Gattuccio0 » 08/04/10 10:04

Non ho saputo aspettare: ho preso una cartella da 59 files. Ho lanciato la macro ma mi viene richiesto di sovrascrivere i dati (probabilmente estrapola da ogni documento .txt i contentuti e li fa partire da A1. Come prende i contentuti del secondo documento li riporta nelle medesim aposizione e quindi suppongo che mi chieda la sovrascrizione per questo motivo...potrebbe essere?)
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Automatizzare estrazioni da .txt

Postdi Gattuccio0 » 08/04/10 10:08

Esattamente richiede:
"Sostituire il contenuto delle celle di destinazione?"

Ho dato annulla (dando ok mi sovrascriveva). Al debug risulta il seguente errore:

Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
TrailingMinusNumbers:=True
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Automatizzare estrazioni da .txt

Postdi Flash30005 » 08/04/10 12:48

Quello è un messaggio di avviso devi premere ok
comunque per evitare che quel messaggio appaia devi inserire due righe nella macro "Trasponi" ma ti invio l'intera macro che sostituirai
Codice: Seleziona tutto
Sub Trasponi()
Application.DisplayAlerts = False   '<<< aggiunta
    Range("A3:B8").Select
    Selection.Copy
    Range("D3").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Application.CutCopyMode = False
    Range("D3:I4").Cut Destination:=Range("A3:F4")
    Rows("5:7").Select
    Selection.Delete Shift:=xlUp
    Rows("5:5").Select
    Selection.ClearContents
    Range("A1").Select
    Sheets("Foglio2").Select
Application.DisplayAlerts = True '<<< aggiunta
End Sub


Fai sapere

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Automatizzare estrazioni da .txt

Postdi Gattuccio0 » 08/04/10 14:15

Ho inserito la modifica.
Ho lanciato la macro.

Ho dato l'ok tutte le volte ch emi appariva il messaggio di sostituzione celle di destinazione.

Alla fine mi appare un messaggio di errore:

Errore di run-time '5':
Chiamata di routine o argomento non validi

Debug:

End If
Next virg
SaltaV:
If Mid(riga, 1, 1) = "*" Or Mid(riga, 1, 5) = "Nuova" Or Mid(riga, 1, 4) = "All " Or Mid(riga, 1, 1) = "Â" Or Mid(riga, 1, 7) = "cognome" Or Mid(riga, 1, 8) = "<http://" Then GoTo esci
InsR = Range("A1").CurrentRegion.Rows.Count + 1
riga = Replace(riga, ":", "|")
riga = Replace(riga, "<http", "")
riga = Replace(riga, "//", "")
riga = Replace(riga, ">", "")
riga = Replace(riga, "e-mail <mailto", "")
If Mid(riga, Len(riga) - 5, 4) = "nome" Then riga = riga & "cognome"
If UR = 1 Then
ContaUR = ContaUR + 1
M_Riga = M_Riga & " " & riga
GoTo esci
End If
Range("A" & InsR).Value = riga


Il file ha processato tutti e 59 i documenti .txt (lo vedo nel foglio denominato 'Elenco'). Nel Foglio2 ho solamente un record ma non è formattato come quelli di esempio nel tuo documento in Excel.
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Automatizzare estrazioni da .txt

Postdi Flash30005 » 08/04/10 15:08

Scarica questo file
Inserisci i tuoi file testo in
C:\Ricette\File\ qui
eventualmente inserisci in questa directory anche il file .xls che hai appena scaricato
e avvia la macro
"ACercaCampo" (la prima dell'elenco macro quando premi ALT+F8)

Fai sapere

Ciao

P.s. quando invii i codici macro è opportuno usare il Tag Code in alto all'editor del post che evita di modificare il codice con emoticon e inoltre, il codice, è più visibile su fondo bianco
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Automatizzare estrazioni da .txt

Postdi Gattuccio0 » 08/04/10 15:58

Stesso identico risultato ed errore di prima...
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Automatizzare estrazioni da .txt

Postdi Flash30005 » 08/04/10 21:40

Devi sicuramente sbagliare qualcosa
il file è stato testato più volte e non dà problemi
mi devi dire se nell'elenco hai il nome dei file oppure no
dove si blocca la macro
se avvii la macro dal folgio3, dal foglio2 o dal foglio elenco
io l'ho provato partendo sial dal foglio2 e foglio3 senza problemi
---
prova anche a caricare solo il file 1.txt e 3.txt (quelli da te inviati) e vedi se con solo questi due file continui ad avere problemi

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Automatizzare estrazioni da .txt

Postdi Gattuccio0 » 08/04/10 22:12

Ho fatto delle prove con i 2 file che ho inviato io all'inizio: tutto OK.

Ho cominciato a processare i files che ho sul mio PC: se processo due files alla volta non ci sono problemi...tutto fila liscio (sei un grande Flash).

Ma se processo più di due files alla volta esce il messaggio di errore.
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Automatizzare estrazioni da .txt

Postdi Anthony47 » 08/04/10 22:32

Sei sicuro che dipende dal fatto che processi piu' di due file a generare l' errore, e non dal fatto che qualche file ha una struttura diversa dagli altri?
Comunque, solo per prova, visto che non ho ricostruito il funzionamento dell' intera macro, sostituisci la riga che ti va in errore con queste:
Codice: Seleziona tutto
If Len(Riga)>5 then
If Mid(riga, Len(riga) - 5, 4) = "nome" Then riga = riga & "cognome"
End If

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Automatizzare estrazioni da .txt

Postdi Gattuccio0 » 08/04/10 22:39

Ciao Anthony.
Mi sta venendo un atroce dubbio: che come dici tu non tutti i files abbiano la stessa struttura in quanto, processandone uno in particolar modo (che ha 3 records), il risultato è che mi viene impaginata in Excel solamente una riga di dati.
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Re: Automatizzare estrazioni da .txt

Postdi Gattuccio0 » 08/04/10 22:42

Dubbio tolto: le righe iniziali corrispondono in tutti i documenti.

Non ho proprio idea di cosa possa accadere durante il processo dei files.
Gattuccio0
Utente Senior
 
Post: 186
Iscritto il: 22/06/09 12:46

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Automatizzare estrazioni da .txt":


Chi c’è in linea

Visitano il forum: systemcrack e 36 ospiti