dimecres, 20 de març de 2013

Afegir un text en cada línia

L'objectiu seria afegir a cada linia d'un txt el seu nom de fitxer. Exemple:



Es a dir, volem que cada linia del fitxer de Barcelona (08019) afegeixi, al principi de línia, aquest codi INE. Les dades es troben en una carpeta D:\addINE

El codi en VBA (es recomana llegir-ho amb Notepad++). S'ha fet en un formulari amb un únic botó.


Option Compare Database
Option Explicit
Dim dbs As Database
Dim rs As Recordset

Private Sub cmdCarregaINE_Click()
Dim qryTblINE As String 'Creem una variable per una query que funcionarà com a recordset
Dim strFitxer, strFitxerEscript As String 'Creem les variable pel fitxer origen i pel fitxer provisional on escriurem
Dim intFitxer, intFitxerEscript As Long 'Creem les variables per donar un número d'ordre al fitxer -origen i provisional-
Dim linFitxer, linFitxerEscript As String 'Creem les variables on desarem el que llegim i escribim
qryTblINE = "SELECT tblINE.INE FROM tblINE ORDER BY tblINE.INE;"
Set dbs = CurrentDb
Set rs = dbs.OpenRecordset(qryTblINE) 'Al cridar a una variable no possem les cometes. Si cridessim a una taula si caldria que fos amb cometes ("tblINE")
    While Not rs.EOF
        intFitxer = FreeFile 'obtenim un número de gestor de fitxer lliure per gestionar l'opertura de fitxer inicial
        strFitxer = "D:\addINE\" & rs![ine] & ".txt" 'Obtenim la ruta origen
        strFitxerEscript = "D:\addINE\" & rs![ine] & "Escript.txt" 'Obtenim la ruta destí provisional
        Open strFitxer For Input As #intFitxer 'Obrim el fitxer original per lectura donant-li un gestor ordenat
            While Not EOF(intFitxer) 'Mentre no arribem al final del fitxer. Fem servir un gestor ordenat, no el propi fitxer
                Line Input #intFitxer, linFitxer 'Escribim el contingut de la linia tractada en una variable
                linFitxer = rs![ine] & ";" & linFitxer 'Afegim el valor del rs![INE] + ; al principi de la linia tractada
                 
                    intFitxerEscript = FreeFile 'Obtenim un nou número de gestor de fitxer lliure pel fitxer provisional
                    Open strFitxerEscript For Append As #intFitxerEscript 'Obrim el fitxer provisional en mode escriptura amb el gestor
                        Print #intFitxerEscript, linFitxer 'Escribim dins el fitxer provisional,amb un gestor, la variable que hem llegit
                    Close #intFitxerEscript 'Tanquem el fitxer provisional. Cada vegada tindrà una linia més
            Wend
        Close #intFitxer 'Tanquem el fitxer inicial
        Kill strFitxer 'Matem físicament el fitxer inicial
        Name strFitxerEscript As strFitxer 'Canviem el nom del fitxer provisional pel nom del inicial
    rs.MoveNext 'anem al següent registre del recordset
    Wend
        MsgBox "Ja he acabat"
End Sub

Cap comentari:

Publica un comentari a l'entrada