leggere un documento dal codice



  • leggere un documento dal codice
    di nokia3310 data: 06/03/2014 14:28:32

    Ciao, sto facendo una macro che deve creare degli script partendo da un file contenuto in una cartella.
    Mettiamo il caso che questo file si chiami "pippo" e al suo interno devo ad esempio cercare la parola "ciao"; quindi mi serve un modo per fare un InStr all'interno del documento "pippo" per trovare la parola "ciao".

    A= InStr(......)

    Come posso fare?
    Grazie!



  • di Grograman (utente non iscritto) data: 06/03/2014 14:33:12

    Ma sto pippo è un file di testo o un file excel?
    O altro ancora?



  • di nokia3310 data: 06/03/2014 15:01:09

    ...sono file .csv



  • di Grograman (utente non iscritto) data: 06/03/2014 15:02:08

    E allora ci sono mille modi per farlo. Sii più specifico.



  • di nokia3310 data: 06/03/2014 15:11:01

    Allora inizialmente la ricerca delle parole avveniva in un file excel ed era di questo tipo:

    For i = 1 To 10000 ' 10000 righe della tabella comandi'


    A = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "Switches")
    B = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "SSE")
    C = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "CAB3K")
    D = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "CAB9K")
    D1 = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "AUX")
    D2 = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "PowerPanel")
    G = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "Generals")
    H = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "Gate")

    Voglio svincolarmi dall'excel, per questo ho creato una cartella in cui far generare al codice la Tabella_comandi sopra citata in questo modo:

    Private Function CreazioneCartelle(ByVal PS As String)

    Dim i As Integer
    file = ActiveWorkbook.Path & "" & PS & ""
    Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
    If Not FileSystemObj.folderExists(file) Then
    FileSystemObj.CreateFolder file
    MsgBox "E' stata creata la nuova cartella" & file, vbInformation, "Avviso"
    End If

    Set pFSO = CreateObject("Scripting.FileSystemObject")
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Set fPersFile = pFSO.OpenTextFile(file & "Tabella Comandi " & PS & ".csv", ForAppending, True)
    If IsNull(fPersFile) Then
    MsgBox "PV_Muxed: Errore nella creazione di Tabella_Comandi_" & PS & ".csv"
    End If
    End Function

    A questo punto io voglio fare la ricerca delle parole (prima porzione di codice che ti ho mandato), nel file Tabella_Comandi creato e non più nell'excel.
    Ho pensato di fare un set di questo tipo:

    Set new = pFSO.OpenTextFile(file & "Tabella Comandi " & PS & ".csv", ForWriting, True)

    poi però non so come leggere dal documento e quindi come fare la ricerca delle parole nel file Tabella_comandi.csv



  • di Grograman (utente non iscritto) data: 06/03/2014 15:39:12

    Io intanto ti suggerirei di importarlo da "dati" - "carica dati esterni" - "da testo" direttamente in in foglio del file da cui parti (ed eliminarlo quando hai finito).

    Ovviamente il tutto mentre ti registri.

    Questo per quanto riguarda l'importazione del csv.
    Continua ad essermi oscuro invece lo scopo.
    Per i file di testo ad ogni modo la variabile oggetto più indicata è "textstream"
    Ti riporto una routine dove la utilizzo (per esportare in txt però)
     
    Option Explicit
    
    
    Sub Esporta_TXT()
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ''' ATTENZIONE RICHIEDE L'ATTIVAZIONE DELLA LIBRERIA MICROSOFT SCRIPTING RUNTIME '''
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      Dim wbINF As Workbook
      Dim wsINF As Worksheet, wsData As Worksheet
      
      Dim objFSYS As New FileSystemObject 'leggasi sopra, attiva la libreria
      Dim objTxt As TextStream 'Tipo per file di testo
      Dim strTxt As String, strData As String
      Dim x As Long, i As Long
      
      Set wbINF = ThisWorkbook
      Set wsINF = wbINF.Sheets("Per Upload A2")
      Set wsData = wbINF.Sheets("Dipendenti")
      
      strData = Format(wsData.Cells(5, 7), "dd-mm-yyyy")
      Set objTxt = objFSYS.CreateTextFile(wbINF.Path & "INF.78 al " & strData & ".txt", True) 'creo file txt, sovrascrivo precedenti
      
      With wsINF
        x = .Range("A" & Rows.Count).End(xlUp).Row
        For i = 1 To x
          strTxt = .Cells(i, 1).Text
          If strTxt <> "" Then
            With objTxt
              .Write strTxt
              .Write vbNewLine
            End With
          End If
        Next i
      End With
    
      Call Shell("explorer.exe " & wbINF.Path, vbNormalFocus)
      
      Set wbINF = Nothing
      Set wsINF = Nothing
      Set wsData = Nothing
      Set objTxt = Nothing
        
    End Sub



  • di patel data: 06/03/2014 15:39:35

    col codice allegato ti ritrovi il contenuto del file di testo nella stringa st
     
    Sub TextFileToString()
    folderPath = "E:prova"
    Filename = "1.txt"
    st = CreateObject("scripting.filesystemobject").opentextfile(folderPath & Filename).readall
    End Sub