Rinominare File di Txt di una cartella con la stringa interna ad ogni file TXT

Anonimo
2017-01-31T10:22:50+00:00

Salve,

ho una serie di file Txt in una cartella, e vorrei rinominarli con una stringa contenuta in ogni file (che puo' variare) ma e' sempre racchiusa all'interno di queste due parole:

From 01/02/2016 to 02/12/2016 Period

Vorrei rinominare il file txt con i dati contenuti all'interno di From e Period e sostituire le / con nulla da aver il file rinominato con:

01022016 to 02122016

Ogni file avra' delle date diverse per questo ognuno avra' un nome diverso.

Grazie Mille

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2017-02-02T09:40:28+00:00

ciao Lorenzo,

Ciao Sandro, buongiorno...

buongiorno a te :-)

[...]

FUNZIONAAAAAAAAAAAAAAA Fantastico :)

[...]

avverto un piccolissimo cenno di soddisfazione ed entusiasmo ;-), bene :-DD.

[...]

Allora perfetto ora funziona, scusa se no nero stato preciso fin dall'inizio...

[...]

nessuna ragione di scusarsi la prima bozza della routine non prevedeva molte cose....ma alla fine ci siamo arrivati...

[...]

Un ultima domanda...se volessi far si di scegliere una qualsiasi cartella, anziché utilizzare un percorso fisso, come dovremmo cambiare il codice?

[...]

si corretta osservazione.

inserisci la funzione, folderPicker che si appoggia al fileDialog e rende un un path selezionato con il classico prompt di Windows.

Ti incollo anche la funzione renameXLS2, ho apportato qualche modifica, non rilevantissima...ma comunque te la mostro ugualmente :

Private Function folderPicker() As String

Dim fDialog      As Object

Set fDialog = Application.FileDialog(4)

With fDialog

    .Title = "Seleziona una cartella:"

    .InitialFileName = "C:"

    .AllowMultiSelect = False

    folderPicker = vbNullString

    If .Show Then

        folderPicker = .SelectedItems(1) & ""

    End If

End With

End Function

Sub renameXLS2()

On Error GoTo errorHandler

'Const strPathTxtFileToSearch As String = "F:\desktop\provaXLS\testo\*.txt"

'Const strPathTxtFile         As String = "F:\desktop\provaXLS\testo"

 Dim strPathTxtFile As String

 strPathTxtFile = folderPicker()

 If Len(strPathTxtFile) = 0 Then

    VBA.MsgBox prompt:="Nessuna cartella selezionata!", _

               Buttons:=vbInformation, _

               Title:="Avviso"

    Exit Sub

 End If

 Dim strPathTxtFileToSearch As String

 Dim strFile                As String

 Dim strfullPathFile        As String

 Dim strStringFileName      As String

 Dim strNewFileName         As String

 Dim lngLengthName          As Long

 Dim lngCountFile           As Long

 Dim lngCountFileM          As Long

 Dim strMessage             As String

 strPathTxtFileToSearch = strPathTxtFile & "*.txt"

 strFile = Dir(strPathTxtFileToSearch, 0)

 Do While Len(strFile) > 0

     lngCountFile = lngCountFile + 1

     strfullPathFile = strPathTxtFile & strFile

     If (GetAttr(strfullPathFile) And vbDirectory) = 0 Then

          If strFile <> "." And strFile <> ".." Then

            Open strfullPathFile For Input As #1

           lngLengthName = 0

           strNewFileName = vbNullString

           Do

                Input #1, strStringFileName

                 If InStr(1, strStringFileName, "From") Then

                    strNewFileName = splitFileName(strStringFileName) & ".txt"

                    lngLengthName = Len(strNewFileName)

                    lngCountFileM = lngCountFileM + 1

                End If

            Loop Until EOF(1) Or lngLengthName > 0

             Close #1

             If lngLengthName > 0 Then

                 Name strPathTxtFile & strFile As strPathTxtFile & strNewFileName

             End If

         End If

     End If

     strFile = Dir()

 Loop

strMessage = "Ho Finito."

If lngCountFileM > 0 Then

    strMessage = "Ho finito. Ho individuato " & lngCountFile & " files di testo " & vbNewLine & _

                 "Ne ho rinominati " & lngCountFileM & "." & vbNewLine & _

                 "ciao!"

End If

ext_errorHandler:

     VBA.MsgBox prompt:=strMessage, _

                 Buttons:=vbInformation, _

                 Title:="Avviso"

     Exit Sub

errorHandler:

   With Err

         MsgBox "ERR#" & .Number _

                & vbNewLine & .Description _

               , vbOKOnly Or vbCritical

     End With

     Resume ext_errorHandler

End Sub

Volendo essere maggiormente fantasiosi si potrebbe implementarla ulteriormente ed addirittura provare l'ebbrezza della gestione via API di Windows, ma restiamo sul semplice....

[...]

In merito alla tua risposta ti ringrazio...Io sono bravo con Excel, ma poi deficio in VBA...conosco la programmazione ad oggetti, uso swift ma e' molto piu' semplice di VBA, in quanto in VBA da quello che vedo e' la vecchia programmazione ad oggetti (vecchia per modo di dire, ma molti piu' caretteri chiave)..

Almeno e' quello che noto io, poi potrei sbagliarmi...

[...]

io Excel lo conosco poco e male, e.....tra l'altro....sei un Apple developer...? e cosa ci fai qui...? via..! Scherzo ovviamente!Non conosco nulla di Swift, ma per certo la logica della programmazione ad oggetti aiuta molto.

Devo dirti che VBA non è propriamente object oriented, ma se hai altre basi credo che non ti sarà difficile familiarizzare con VBA.

[...]

Access lo trovo interessante ma oltre allo struttura e al fine..non lo conosco...per adesso visto che Excel e' pane quotidiano per me, mi piacerebbe approfondire VBA...vediamo cosa ne esce fuori..

[...]

sono un appassionato di databases relazionali e quelli piatti non mi piacciono anche se trovo la capacità di calcolo di Excel straordinaria. Excel per me è un appoggio fondamentale per estrarre dati dal database.

[...]

Scusa la domanda personale, tu come hai iniziato ad usare VBA?

Grazie Mille

Lorenzo

[...]

quasi tutto quelli che utilizzano Access provengono da Excel e la logica dell'uno e dell'altro sono moooolto diverse.

Passi ad Access quando i dati da gestire sono molti relazionati tra loro e cominci a fare fatica ad elaborali con Excel e poi da li piano piano capisci come procedere passo, passo... proprio passo passo...! e se poi ti appassioni è fatta!

[...]

Grazie Mille

Lorenzo

[...]

ti saluto!

Ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

11 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-01-31T14:12:46+00:00

    ciao Sandro grazie per la pazienza e il tempo...

    ma se usiamo FROM e PERIOD come delimitatori...

    Nel senso:

    Trova FROM

    Prendi tutti i caratteri dopo la la fine della parola FORM e Salva tutto fino a quando non TOROVA la parola PERIOD.

    Poi pulisci questo valore eliminado gli / e basta....

    Io non saprei come scriverlo in quanto sintassi VBA come dicevo e' zero..

    Eventualmente poi mi sapresti suggerire dei tutorial da vedere x imparare il VBA?

    Grazie Mille

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-01-31T13:47:35+00:00

    ciao, LMByloom

    l'istruzione che segue :

    aFile = Split(strStringFileName, " ")

    crea un array per la generazione del nuovo nome del file, basandosi sul fatto che la stringa contenuta nel file di testo :

    From 01/02/2016 to 02/12/2016 Period

    sia costituita nel seguente modo :

    from [spazio] gg/mm/aaaa [spazio] to [spazio] gg/mm/aaaa [spazio] period

    se dopo from invece di uno spazio ne hai due l'array viene creato in "malo modo" e di conseguenza il file nominato non correttamente.

    alla due stringhe che seguono

    From  2/08/15 To29/08/15 Period Closed,

    From 27/03/16 To30/04/16 Period Closed,

    manca uno 0 nella prima data per la prima e per entrambe lo spazio dopo il to.

    a quella che segue :

    From 29/03/15 To 2/05/15 Period Closed rinominato con 290315 to 20515

    lo zero per la seconda data 02/05/2015.

    dovresti rivedere la stringa contenuta all'interno dei file di testo perché se scritta in modo diverso di volta in volta, l'automazione è pressoché impossibile, in quanto impossibile ipotizzare le varianti :-DDDD.

    La data su può rivedere automaticamente con la funzione intrinseca format, ma se mancano spazi...mmmm...no....

    modifica questa riga :

    strNewFileName = Replace(aFile(1), "/", "") & " to " & Replace(aFile(3), "/", "") & ".txt"

    così :

    strNewFileName = Format$(aFile(1), "ddmmyy") & " to " & Format$(aFile(3), "ddmmyy") & ".txt"

    Facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-01-31T12:59:18+00:00

    Ciao Sandro,

    grazie prima di tutto per la risposta.

    Ho provato la macro, ma alcuni li rinomina correttamente altri no....

    del tipo:

    From  2/08/15 To29/08/15 Period Closed rinominato con  to To290815

    From 27/03/16 To30/04/16 Period Closed rinominato con 270316 to Period

    From 29/03/15 To 2/05/15 Period Closed rinominato con 290315 to 20515

    uhm...

    ho provato a guardar il codice..ma putroppo non consoco bene la sintassi di VBA.

    Grazie per l' aiuto

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-01-31T12:18:24+00:00

    ciao, LMByloom,

    aspettando il grande Norman provo a suggerirti quanto segue .

    La routine che segue cerca all'interno dei file di testo di una directory la presenza della parola From.

    Quando la trova, suppone che sia la riga incriminate contenente il nome del file da rinominare, lo chiude e lo rinomina seguendo l'indicazione che hai dato

    Così per tutti i files di testo.

    Prova e facci sapere.

    Apri VBE copia il codice che segue in un modulo, personalizzando il path contenente i files di testo evidenziato in grassetto.

    Fai sempre una prova su una cartella di backup, mi raccomando!

    Facci sapere!

    ciao, Sandro.

    Sub renameXLS2()

    On Error GoTo errorHandler

    Const strPathTxtFileToSearch As String = "F:\desktop\provaXLS\testo\*.txt"

    Const strPathTxtFile         As String = "F:\desktop\provaXLS\testo"

    Dim strFile           As String

    Dim strfullPathFile   As String

    Dim strStringFileName As String

    Dim strNewFileName    As String

    Dim aFile()           As String

    strFile = Dir(strPathTxtFileToSearch)

    Do While strFile <> ""

        strfullPathFile = strPathTxtFile & strFile

        If (GetAttr(strfullPathFile) And vbDirectory) = 0 Then

             If strFile <> "." And strFile <> ".." Then

               Open strfullPathFile For Input As #1

               Do

                 Input #1, strStringFileName

                 If InStr(1, strStringFileName, "From") Then

                        Close #1

                        aFile = Split(strStringFileName, " ")

                        strNewFileName = Replace(aFile(1), "/", "") & " to " & Replace(aFile(3), "/", "") & ".txt"

                        Name strPathTxtFile & strFile As strPathTxtFile & strNewFileName

                 End If

                Loop Until Len(strNewFileName) > 0

                strNewFileName = vbNullString

            End If

        End If

        strFile = Dir()

    Loop

    ext_errorHandler:

        Exit Sub

    errorHandler:

       With Err

            MsgBox "ERR#" & .Number _

                   & vbNewLine & .Description _

                  , vbOKOnly Or vbCritical

        End With

        Resume ext_errorHandler

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento