Condividi:        

estrai

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

estrai

Postdi lucas_71 » 02/08/18 19:35

Buonasera avrei bisogno di un aiuto per estrarre ed importare un txt che è strutturato in questo modo:

100000000200400000
79010000644320000999000000000 0000000
79010001290630000222000000000 0000000
79000001090200000333000000000 0000000
79000000044330000001000000000 0000000
300000000200400000 ECC.......

Dalla seconda riga del txt fino alla penultima dovrebbe importare questi dati nella colonna T

6443
12906
10902
0443
cioè, prendendo in considerazione le prime 12 cifre, tutto quello che c'è dopo l'ultimo zero ma con un minimo di 4 cifre
mentre questi nella colonna U
999
222
333
001
Grazie.
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42

Sponsor
 

Re: estrai

Postdi Marius44 » 02/08/18 20:52

Ciao
oltre 12 ore fa ti è stata data una possibile soluzione https://www.excelvba.it/forumexcel/foru ... #post-5827 e non ti sei degnato neanche di dare un riscontro.

Non mi sembra uno dei migliori approcci ad un Forum.
Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: estrai

Postdi lucas_71 » 02/08/18 21:37

Ciao, Mario non voglio essere per nulla polemico, ti ho risposto al messaggio proprio questa sera..ho mandato una richiesta di aiuto sul forum il 13/07/2018 ho avuto due risposte con la tua di oggi, non ho mai preteso nulla e ci mancherebbe altro, a distanza di 20 giorni ho scritto qui..Ti chiedo scusa se in qualche modo ho offeso te, ed il forum..
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42

Re: estrai

Postdi Anthony47 » 02/08/18 23:28

La nostra politica non vieta il crossposting; tuttavia e' obbligatorio "seguire" la discussione...

Non so cosa ti e' stato gia' risposto, io ti propongo questa macro:
Codice: Seleziona tutto
Sub txtImp()
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=109935
Dim myF As String, myFF, fRiga As String, cLin As Long
Dim I As Long
'
myF = "C:\Percorso\NomeFile.txt"              '<<< Il percorso + nome del file da importare
Range("T:U").ClearContents                    '!!! AZZERA inizalmente le colonne T-U
Close #1
Open myF For Input As #1
Do While Not EOF(1)
    cLin = cLin + 1
    Line Input #1, fRiga
    If cLin > 1 Then
        For I = 8 To 1 Step -1
            If Mid(fRiga, I, 1) = "0" Then Exit For
        Next I
        If I > 0 Then
            str1 = Mid(fRiga, I + 1, 12 - I)
            Cells(cLin, "T") = str1
            Cells(cLin, "U") = Mid(fRiga, 18, 3)
        End If
    End If
    DoEvents
Loop
Close #1
End Sub

Va messa in un "Modulo standard" del vba. La riga marcata <<< va personalizzata come da commento, poi all'occorrenza va eseguita la Sub txtImp.

Le colonne T e U devono essere state preventivamente formattate come "Testo"; il loro contenuto viene azzerato senza preavviso a inizio macro (vedi istruzione marcata !!!; eliminare l'istruzione se l'azzeramento e' da evitare)

Questa macro apre il file txt, ne legge il contenuto da riga 2 in avanti e da esse estrae le due informazioni richieste.

Se invece il testo fosse gia' in colonna A, allora potresti usare in T2 la formula
Codice: Seleziona tutto
=STRINGA.ESTRAI(A2;MAX((STRINGA.ESTRAI(A2;RIF.RIGA($1:$8);1)="0")*RIF.RIGA($1:$8))+1;12-MAX((STRINGA.ESTRAI(A2;RIF.RIGA($1:$8);1)="0")*RIF.RIGA($1:$8)))
Va confermata tramite i tasti Contr-Maiusc-Enter (non il solo Enter) e poi copiata verso il basso
Per la colonna U, dovrebbe bastare in U2
Codice: Seleziona tutto
=STRINGA.ESTRAI(A2;18;3)
Da copiare poi verso il basso.

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

Re: estrai

Postdi lucas_71 » 04/08/18 08:13

Grazie Anthony47, la macro funziona perfettamente,
solamente il terminale non mi permette l' apertura diretta del file quindi e per evitare dei passaggi in manuale , devo fare un invio fittizio, ed il file si modifica da così
che era quello che avevo postato
100000000200400000
79010000644320000999000000000 0000000
79010001290630000222000000000 0000000
79000001090200000333000000000 0000000
79000000044330000001000000000 0000000
79000001724750000001000000000 0000000
79000001079410000010000000000 0000000
a così
10000000030030****
279010000644320999
279010001290630222
279000001090200333
279000000044330001
279000001724750001
279000001079410010
300000000200400000

Si puo modificare la macro ?
Poi già che ci sono come si apre un file dove il nome rimane sempre uguale, ma l'estensione no, esempio:
estrai.001
estrai.002 ecc...
myF = "C:\Percorso\estrai*.*" tipo qualcosa del genere ??
Grazie
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42

Re: estrai

Postdi Anthony47 » 05/08/18 11:51

Mi sembra strano che il formato cambi cosi' radicalmente per un invio file; ti auguro che la struttura sia effettivamente stabile e non "casuale". Le modifiche alla macro sono comunque marginali.
Quallo all'ipotesi di poter scegliere il file, la cosa migliore e' sostituire "myF = etc etc" con una scelta tramite dialogue box.
Il codice della nuova versione:
Codice: Seleziona tutto
Sub txtImp2()
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=109935
Dim myF As String, myFF, fRiga As String, cLin As Long
Dim I As Long
'
''myF = "C:\Users\A_Monge1\Downloads\cippa_03.txt"
'Scegli il file da gestire:
With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add "Text", "*.txt", 1   '<<< Filtro per estensione
    .Show
    If .SelectedItems.Count = 0 Then
         MsgBox ("Nessuna voce selezionata, procedura annullata")
         Exit Sub
    End If
    myF = .SelectedItems(1)      'Directory e Nome del file selezionato
End With
Range("T:U").ClearContents
Close #1
Open myF For Input As #1
Do While Not EOF(1)
    cLin = cLin + 1
    Line Input #1, fRiga
    If cLin > 1 Then
        For I = 9 To 1 Step -1
            If Mid(fRiga, I, 1) = "0" Then Exit For
        Next I
        If I > 0 Then
            str1 = Mid(fRiga, I + 1, 12 - I)
            Cells(cLin, "T") = str1
            Cells(cLin, "U") = Right(fRiga, 3)
        End If
    End If
    DoEvents
Loop
Close #1
End Sub


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

Re: estrai

Postdi lucas_71 » 05/08/18 15:51

La macro modificata è ok...
la scelta del file, anche, ma mi sarebbe più utile aprirlo direttamente senza leggere l'estensione ma solo il nome che è univoco.
''myF = "C:\Users\A_Monge1\Downloads\cippa_03" ho provato con i caratteri * ma non ci sono riuscito...
il terminale crea dei file cosi:
cippa.03
cippa.04
ecc...senza l'estensione

una volta poi importato in excel dovrebbe cancerlarlo...
Grazie di nuovo.
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42

Re: estrai

Postdi Anthony47 » 06/08/18 14:28

Tu vorresti che una macro apra un file univoco, ne estragga alcuni dati, poi lo cancelli.
Cancellare la sorgente dei dati e' contrario al principio della tracciabilita' dei risultati, quindi non il mio codice non lo fara'.

Far scegliere autonomamente il file da importare si puo' fare, se spieghi quale criterio si possa adottare; poi invece che cancellarlo si puo' spostare in una sottodirectory "LAVORATI".

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

Re: estrai

Postdi lucas_71 » 06/08/18 16:24

Spiego, il terminale normalmente lo uso per inviare ordini al cedi, lo sto sfruttando per velocizzare degli ordini che ho su dei listini excel, quindi in realtà comunque rimane una copia di backup sul terminale, ma per avere il file da importare devo fare un invio fittizio che finisce in una cartella del gestionale e li non ho bisogno di avere quel file, per me non sarebbe un problema scegliere e riconoscere il file ed eliminarlo, ma per un mio collega si, quindi vorrei evitare per non creare problrmi non dare la possibilità di scegliere ma soltanto di caricare il file
Il terminale crea dei file con una sigla.001 es: cote.001 cote.002 appunto perchè li memorizza in una cartella di backup sul terminale.
Quello che vorrei quindi è che la macro prima cancelli i cote.xxx presenti nella cartella ,con un msgbox faccio l'invio da terminale poi importi il file presente nella cartella\cote.xxx e ne cancelli la presenza. Tutto qui :)
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42

Re: estrai

Postdi Anthony47 » 08/08/18 23:38

Allora...
Ho modificato la macro:
Codice: Seleziona tutto
Sub txtImp3()
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=109935
Dim myF As String, myFF, fRiga As String, cLin As Long
Dim I As Long, myPath As String, myBas As String
'
myPath = "C:\Users\PercorsoCompleto\"           '<<< Il PATH del file, con \ finale
myBas = "cippa"                                 '<<< La "base" del nome file, senza estensione

myDir = Dir(myPath & myBas & "*.*")
If myDir = "" Then
    MsgBox ("Non trovato nessun file in " & myPath _
       & vbCrLf & "Il processo verra' terminato")
    Exit Sub
End If
'Chiedi il file da gestire:
myF = myPath & myDir
Range("T:U").ClearContents
Close #1
Open myF For Input As #1
Do While Not EOF(1)
    cLin = cLin + 1
    Line Input #1, fRiga
    If cLin > 1 Then
        For I = 9 To 1 Step -1
            If Mid(fRiga, I, 1) = "0" Then Exit For
        Next I
        If I > 0 Then
            str1 = Mid(fRiga, I + 1, 13 - I)
            Cells(cLin, "T") = str1
            Cells(cLin, "U") = Right(fRiga, 3)
        End If
    End If
    DoEvents
Loop
Close #1
'rinomina il file "lavorato":
Name myF As Replace(myF, myDir, "LAVORATI\" & myDir, , , vbTextCompare)
End Sub
Le istruzioni marcate <<< vanno personalizzate come da commento

La macro cerca nella directory indicata UN file col nome myBas*.*; se non lo trova la macro si termina; altrimenti apre quel file e da esso estrae le due informazioni di cui parliamo.
Completato il ciclo il file viene spostato in una directory "LAVORATI", che deve gia' esistere all'interno della directory in cui si cerca il file.
Qui puo' essere cancellato manualmente quando non serve piu'.

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

Re: estrai

Postdi lucas_71 » 25/08/18 14:30

Grazie Anthony e scusa per il ritardo...provo e ti faccio sapere...
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42


Torna a Applicazioni Office Windows


Topic correlati a "estrai":


Chi c’è in linea

Visitano il forum: Nessuno e 51 ospiti