Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    492

    Copiare una riga da un file txt e metterlo in altro file

    Salve a tutti
    devo processare alcuni dati che si trovano in un file txt, ogni riga corrisponde ad un dato da processare. L'applicazione che è stata già scritta non da me, purtroppo prende in input solo la prima riga e non le seguenti.
    Per risolvere tale problema, avevo pensato ad un'applicazione che copia da un File2.txt, dove sono inseriti tutti i dati in ogni riga, una riga alla volta e la scrive nel File1.txt che viene processato dal programma.
    Come posso fare per far leggere ogni volta dal File2.txt la riga successiva e sovrascriverla ogni volta nel File1.txt?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma cosa non sai fare? Aprire i file in lettura/scrittura, leggere il File2 o scrivere il File1?

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    492
    al momento ho scritto così

    codice:
        Dim Path As String
        intfile = FreeFile
        FileInput = "file2.txt"
        Path = App.Path + "\" + FileInput
        Open Path For Input As #intfile

    così ho aperto il file2 con tutti i dati, dove ogni riga corrisponde ad un dato
    ora non so come copiare una riga alla volta e metterla nel file1 che deve leggere il programma, per poi riandare a leggere la riga successiva del file2 e sovrascriverla nel file1

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scrivi un ciclo di lettura dal file in una stringa L

    codice:
    Do While Not Eof(intfile)
       Line Input #intfile, L
    
       ' ...
    Loop
    Al posto dei puntini inserisci il codice per scrivere nel file1.

    Non ho capito bene se dopo aver scritto una riga, il file1 deve essere elaborato ... in questo caso, devi chiudere il file1 e attendere nel ciclo che venga elaborato ... ma su questo punto non hai dato le informazioni necessarie per poterti dare una indicazione piu' precisa.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    492
    Ho scritto così e funziona però le righe prelevate dal file2 vengono accodate nel file1, mentre invece deve essere sempre sovrascritta (il programma esterno legge solo una riga)

    codice:
    Private Sub Command1_Click()
        Dim Path1 As String
        intfile1 = FreeFile
        FileInput = "file2.txt"
        Path = App.Path & "\" & FileInput
        Open Path For Input As #intfile1
    
        While Not EOF(intfile1)
            Line Input #intfile1, rigaFile1
    
            Dim Path2 As String
            intfile2 = FreeFile
            FileOutput = "file1.txt"
            Path2 = App.Path & "\" & FileOutput
            Open Path2 For Append As intfile2
            Print #intfile2, rigaFile1
            Close #intfile2
            
            'Esecuzione del programma che ha in input il file1.txt
    
        Wend
    End Sub
    Altra domanda, per la lettura del file2 avevo messo Output ma mi dava errore, come mai lo devo aprire come Input?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se utilizzi la modalita' Append i dati vengono accodati. Altrimenti devi usare la Output.

    Un file letto e' in Input ... non capisco l'ultima domanda ...

    Le righe

    codice:
    FileOutput = "file1.txt"
    Path2 = App.Path & "\" & FileOutput
    non e' necessario che stiano nel ciclo ... e' meglio metterle prima del while ...

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    492
    Grazie mille per le risposte
    Ora funziona come volevo


    codice:
    Private Sub Command1_Click()
        Dim Path1 As String
        intfile1 = FreeFile
        FileInput = "file2.txt"
        Path = App.Path & "\" & FileInput
        Open Path For Input As #intfile1
        
        Dim Path2 As String
        FileOutput = "file1.txt"
        Path2 = App.Path & "\" & FileOutput
        
        While Not EOF(intfile1)
            Line Input #intfile1, rigaFile1
    
            
            intfile2 = FreeFile
            
            Open Path2 For Output As intfile2
            Print #intfile2, rigaFile1
            Close #intfile2
            
            'Esecuzione del programma che ha in input il file1.txt
    
        Wend
    End Sub
    Come posso fare ora per far saltare alla riga successiva nel file2, quando trova dei commenti preceduti da *?

    Per esempio nel file2 ho:
    codice:
    *Dati primo rilevamento
    34 34 54 21 65 4 656 767 67 78 989
    23 43 6 56 767 88 78 787 989 56 76
    *Dati secondo rilevamento
    343 34 34 23 5545...
    334 32 232....
    *Dati n-esimo rilevamento
    ... .. . . . ..

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh ... non mi sembra particolarmente difficile imporre una condizione del genere ...

    Magari con un attimo di riflessione in piu', ci saresti arrivato facilmente ...

    codice:
    Private Sub Command1_Click()
        intfile1 = FreeFile
        Open App.Path & "\file2.txt" For Input As #intfile1
        
        While Not EOF(intfile1)
            Line Input #intfile1, rigaFile1
            
            If Left$(rigaFile, 1)<>"*" Then 
               intfile2 = FreeFile
            
               Open App.Path & "\file1.txt" For Output As intfile2
               Print #intfile2, rigaFile1
               Close #intfile2
            
               'Esecuzione del programma che ha in input il file1.txt
            End If     
        Wend
    End Sub
    A questo punto, per semplificare, anche i nomi dei file li puoi inserire direttamente nelle Open.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    492
    Altra domanda riguardo l'esecuzione del programma esterno che è un .exe
    Al momento ho scritto così:

    codice:
    Shell App.Path & "\comp.exe", vbNormalFocus
    e la shell si apre e poi si richiude.

    Premetto che se clicco da winXp due volte su tale file il programma viene lanciato, elabora i dati e si richiude da solo, mentre se lo lancio da una shell aperta mi fa vedere i calcoli che effettua, ed è proprio questo quello che vorrei.

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    492
    Alla mia domanda precedente alla fine ero già riuscito a trovare soluzione, così come mi hai consigliato tu
    Grazie lo stesso...almeno so che ciò che ho fatto era la soluzione migliore

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.