Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Siamo volati fino a Belfast, capitale dell'Irlanda Del Nord, per scoprire il nuovo Realme 15 Pro 5G Game Of Thrones Limited Edition. Una partnership coi fiocchi, quella tra Realme e HBO, un esercizio di stile davvero ben riuscito. Ma vi raccontiamo tutto nel nostro articolo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-10-2003, 23:34   #1
ErMeglio
Member
 
Iscritto dal: Oct 2003
Messaggi: 70
caricare/modificare una riga precisa di un file in VB6

Ciao, volevo chiedervi una mano per un probema col vb(6) che non ho saputo risolvere, premetto che di vb so molto poco, anche se qualche programmino sono riuscito a metterlo su, quindi per favore non siate tecnici perché credo che non capirei niente: gli esempi sono la cosa che mi spiega di più!
Comunque il problema è questo: in pratica voglio "aprire" un semplice file .ini col vb e caricare, controllare ed eventualmente modificare una sua riga precisa.
In particolare non sono riuscito a selezionare proprio una specifica riga, il resto credo di saperlo fare da solo.
Non ho idea di come fare, nonostante abbia provato vari modi seguendo la guida del vb o informazioni su internet. . .
Vi ringrazio in anticipo, spero che qualcuno sappia come fare dai ci conto tnx
ErMeglio è offline   Rispondi citando il messaggio o parte di esso
Old 31-10-2003, 13:15   #2
bsummer
Senior Member
 
L'Avatar di bsummer
 
Iscritto dal: Oct 2002
Messaggi: 487
L'esempio che segue può darti un'idea...il problema è che con il metodo descritto, un file di testo lo puoi o aprire in lettura o in scrittura ma non assieme quindi dovresti fare diverse modifiche.
Potresti perciò fare una cosa del tipo:
-rinomini il file che stai analizzando aggiungendo una estensione. es: da prova.ini -> prova.ini.bak
-crei un nuovo prova.ini nel quale vai a scrivere le righe non modificate dell'originale e quelle modificate in base ai tuoi criteri
-una volta salvato il nuovo file puoi cancellare quello di precendete


Esempio di lettura da file di testo e ricerca stringa...
Codice:
Dim fs, a, retstring
  Set fs = CreateObject("Scripting.FileSystemObject")
  Set a = fs.OpenTextFile("c:\test.ini", ForReading, False)
  Do While a.AtEndOfStream <> True
    retstring = a.ReadLine
    if instr(retstring,"quello che cerchi",vbTextCompare)<>0 then
      ' fai quello che devi
    end if
  Loop
  a.Close
Aloha!
bsummer è offline   Rispondi citando il messaggio o parte di esso
Old 31-10-2003, 13:19   #3
cisky
Member
 
L'Avatar di cisky
 
Iscritto dal: Aug 2001
Città: Gerenzano
Messaggi: 129
Oppure puoi fare una cosa di questo tipo senza creare l'oggetto Scripting..

Codice:
' *** sFile      = Nome del file (Completo di percorso)
'     lRowNumber = Riga da leggere
'
Private Function f_GetFilesRowText(ByVal sFile As String, ByVal lRowNumber As Long) As String

    Dim iFile               As Integer
    Dim bRowFound           As Boolean
    Dim lRowCounter         As Long
    Dim sRowText            As String
    Dim sRet                As String

    iFile = FreeFile()
    
    Open sFile For Input As #iFile
        
        Do While Not EOF(iFile)                     ' *** Scorro sequenzialmente il file.
            Input #iFile, sRowText
            lRowCounter = lRowCounter + 1           ' *** Incremento la posizione della riga corrente
            
            bRowFound = (lRowCounter = lRowNumber)  ' *** Se sono sulla riga desiderata
            If bRowFound Then
                sRet = sRowText
                Exit Do
            End If
        Loop
        
    Close #iFile

    f_GetFilesRowText = sRet

End Function
__________________
E' quasi tutto relativo!
cisky è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2003, 18:55   #4
ErMeglio
Member
 
Iscritto dal: Oct 2003
Messaggi: 70
Grande cisky, funziona alla grande
E se adesso volessi scriverla invece una determinata riga?
Grazie mille x ora
ErMeglio è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2003, 13:20   #5
cisky
Member
 
L'Avatar di cisky
 
Iscritto dal: Aug 2001
Città: Gerenzano
Messaggi: 129
Devi utilizzare una funzione simile a quella che ho scritto ma devi aprire il file in scrittura

(es: Open sFile For Output As #iFile )

e devi utilizzare il metodo Write (es: Write #iFile, "prova").


NOTA: Se hai a che fare con dei file strutturati sempre in uno specifico modo puoi utilizzare le funzioni GET, PUT, SEEK per leggere.scrivere,posizionarsi su un file.

...Prova a dargli un'occhiata.
Se non riesci a creare la funzione x scrivere la singola riga chiedi pure.

ciao!
__________________
E' quasi tutto relativo!
cisky è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2003, 18:36   #6
ErMeglio
Member
 
Iscritto dal: Oct 2003
Messaggi: 70
Mmh... forse non mi sono spiegato su cosa voglio fare:
Sapevo come scrivere un valore in un file (ho fatto un programmino che legge un valore su una smart card attraverso il programmatore, salva il valore su un file, blocca completamente il pc e lo sblocca solo all'inserimento della stessa smart card).
Io volevo in particolare prendere sto file, fai conto un file con scritto
Codice:
Ciao 
sono 
ErMeglio
e cambiare la riga 3 magari scrivendoci un altro nome.
Allora ho studiato a fondo la cosa e avevo fatto così (lasciando la tua funzione nel progetto):
Codice:
 
Private Sub f_PutFilesRowText(sFile1 As String, lRowToChange As Long)

    Dim iFile1               As Integer
    Dim lRowNumber1          As Long
    Dim CompleteToWrite      As String
    Dim a                    As String
    Dim c                    As String
    Dim d                    As String
    Dim wait                 As Long
    
    iFile1 = FreeFile()
    lRowNumber1 = 0
    c = "+ Chr(13) +"
    Do While Not lRowNumber1 = lRowToChange - 1
    a = f_GetFilesRowText("C:\prova.txt", lRowNumber1 + 1) + c
    Loop
    lRowNumber1 = lRowToChange
    Do While Not lRowNumber1 = 7
    d = f_GetFilesRowText("C:\prova.txt", lRowNumber1 + 1) + c
    Loop
    CompleteToWrite = a + RowToBeStored + d

    Label2.Caption = CompleteToWrite
    Open sFile1 For Output Access Write As #iFile1
    Write #iFile1, CompleteToWrite
    Close #iFile1

End Sub
Ciò viene richiamato da un timer:
Codice:
Private Sub Timer1_Timer()
If StoredAtStart <> f_GetFilesRowText("C:\prova.txt", 3) Then GoTo 1 Else GoTo 2
2: If StoredAtStart <> RowToBeStored Then GoTo 1 Else GoTo 3
1: f_PutFilesRowText "C:\prova1.txt", 3
3: End Sub
RowToBeStored (e StoredAtStart) sono stringhe pubbliche e vengono dichiarate nel Form_Load.
Codice:
StoredAtStart = f_GetFilesRowText("C:\prova.txt", 3)
RowToBeStored è la riga da scrivere.
Tutto ciò sembra aver senso e il vb nn corregge nulla, ma quando apro il programma si blocca sembra quando esegue la scrittura
Hai qualche idea?
(scusate il post lungo ma almeno mi sono spiegato x bene )
Tnx
ErMeglio è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2003, 18:37   #7
ErMeglio
Member
 
Iscritto dal: Oct 2003
Messaggi: 70
Ah Do While Not lRowNumber1 = 7, è 7 facendo conto che le righe del file siano 7.
ErMeglio è offline   Rispondi citando il messaggio o parte di esso
Old 04-11-2003, 19:26   #8
cisky
Member
 
L'Avatar di cisky
 
Iscritto dal: Aug 2001
Città: Gerenzano
Messaggi: 129
Uhm, non ho capito bene come deve funzionare il programma che aggiunge la riga di "blocco" al file.
Deve controllare la presenza della riga di blocco all'avvio della form e se non c'è deve aggiungerla? o deve eseguire questo controllo sempre ogni N secondi obbligatoriamente?
All'uscita della form il blocco andrà rimosso?

... ??? ...

In ogni caso ho dato un'occhiata al tuo codice ed ho notato alcune cose che secondo mè si possono ottimizzare.
Oltre ai consigli ti invio anche il codice "rivisitato".La logica non l'ho capita bene, ma penso che ti potrò servire come spunto.
Se hai qualsiasi dubbio chiedi pure!

P.S: Ti scrivo questi consigli non per fare il "Guru" ma solo per darti delle "dritte".

1) sub f_PutFilesRowText In questa sub ho visto che effettui dei cicli per recuperare le righe precedenti e successive alla riga da scrivere (Utilizzando la funzione f_GetFilesRowText).In questo modo il file viene aperto e chiuso moltissime volte, e se il file è di grosse dimensioni si può impiegare molto tempo.Inoltre se si scatena l'evento del timer, la routine verrà rieseguita ma siccome il file è già aperto darà un errore!

2) La Sub Timer1_Timer() non è molto chiara perchè utilizzi dei goto.Ti converrebbe scriverla per passaggi
Cioè:

passo1:
Codice:
 Private Sub Timer1_Timer()
    If StoredAtStart <> f_GetFilesRowText("C:\prova.txt", 3) Then
        f_PutFilesRowText "C:\prova1.txt", 3
    Else
        If StoredAtStart <> RowToBeStored Then
            f_PutFilesRowText "C:\prova1.txt", 3
        Else
            ' ***
        End If
    End If
End Sub
Passo2 (Finale):
Codice:
Private Sub Timer1_Timer()
        
    Dim bPutFile    As Boolean
    Dim sRowFile    As String
        
    sRowFile = f_GetFilesRowText("C:\prova.txt", 3)
    bPutFile = (StoredAtStart <> sRowFile) Or (StoredAtStart <> RowToBeStored)
    
    If bPutFile Then f_PutFilesRowText "C:\prova1.txt", 3

End Sub
... Così non è più chiara?

Questo che segue è l'esempio di codice che ho riscritto.
Ricordati che io non ho capito bene la logica che vuoi utilizzare e non prende per "oro colato" quello che ho scritto (Anche perchè non l'ho provato!)

Codice:
Option Explicit

Private Const FILE_NAME        As String = "W:\Documenti\xxx.txt"   ' *** x Prova

Private m_sRowToBeStored       As String
Private m_sStoredAtStart       As String
Private m_bWriteInProgress     As Boolean

Private Sub Form_Load()
    
    m_sStoredAtStart = f_GetFilesRowText(FILE_NAME, 3)      ' *** Memorizzo il valore iniziale
    m_sRowToBeStored = "ROW KEY CODE"                       ' *** x Prova
    
End Sub

Private Sub Timer1_Timer()

    Dim bPutFile        As Boolean
    Dim sRowText        As String
    
    ' *** (X SICUREZZA) Se questo evento viene scatenato quando sto già eseguendo il codice di scrittura non devo
    '     fare nulla perchè altrimenti si potrebbero verificare degli errori, in quanto il file risulterebbe già aperto.
    '
    If m_bWriteInProgress Then Exit Sub
    
    sRowText = f_GetFilesRowText(FILE_NAME, 3)      ' *** Leggo la riga del file
    
    ' *** Controllo se la riga è diversa dalla riga di "blocco" da aggiungere
    '
    bPutFile = (sRowText <> m_sRowToBeStored)
        
    If bPutFile Then
        ' *** Aggiungo la riga di blocco
        '
        s_PutFilesRowText FILE_NAME, 3, m_sRowToBeStored
    End If
    
    Timer1.Enabled = Not bPutFile   ' *** Se ho scritto la chiave diabilito il Timer

End Sub

Private Function f_GetFilesRowText(ByVal sFile As String, ByVal lRowNumber As Long) As String

    Dim iFile               As Integer
    Dim bRowFound           As Boolean
    Dim lRowCounter         As Long
    Dim sRowText            As String
    Dim sRet                As String

    iFile = FreeFile()
    
    Open sFile For Input As #iFile
        
        Do While Not EOF(iFile)                     ' *** Scorro sequenzialmente il file.
            Input #iFile, sRowText
            lRowCounter = lRowCounter + 1           ' *** Incremento la posizione della riga corrente
            
            bRowFound = (lRowCounter = lRowNumber)  ' *** Se sono sulla riga desiderata
            If bRowFound Then
                sRet = sRowText
                Exit Do
            End If
        Loop
        
    Close #iFile

    f_GetFilesRowText = sRet

End Function

Private Sub s_PutFilesRowText(ByVal sFile As String, ByVal lRowToChange As Long, ByVal sRowToWrite As String)

    Dim iFile               As Integer
    Dim sRowText            As String
    Dim lRowCounter         As Long
    Dim sCompleteToWrite    As String
    Dim bVaiACapo           As Boolean
    
    On Error GoTo lError                ' *** Gestione di eventuali errori

    m_bWriteInProgress = True           ' *** Imposto il flag che indica che stò scrivendo sul file
    
    iFile = FreeFile()
    Open sFile For Input As #iFile
                
        Do While Not EOF(iFile)                     ' *** Scorro sequenzialmente il file.
        
            Input #iFile, sRowText                  ' *** Memorizzo nella variabile sRowText la riga del File
            
            bVaiACapo = (lRowCounter > 0)           ' *** Flag che indica se andare a capo
            lRowCounter = lRowCounter + 1           ' *** Incremento la posizione della riga corrente
            
            ' *** A questo punto devo comporre il testo da scrivere nel file (sCompleteToWrite).
            '     Per fare ciò, controllo se devo inserire la riga da scrivere, altrimenti compongo il testo
            '     aggiungendo la riga letta di volta in volta. (se non è laprima riga, devo andare a capo.)
            '
            If lRowCounter = lRowToChange Then
                ' *** Aggiungo riga da scrivere
                '
                sCompleteToWrite = f_AppendTextToString(sCompleteToWrite, sRowToWrite, bVaiACapo)
            Else
                ' *** Aggiungo la riga letta dal file (Input #iFile,sRowText)
                '
                sCompleteToWrite = f_AppendTextToString(sCompleteToWrite, sRowText, bVaiACapo)
            End If
            
        Loop        ' *** Ciclo tutto il File
        
    Close #iFile

    'Label2.Caption = CompleteToWrite
    
    iFile = FreeFile()
    Open sFile For Output Access Write As #iFile
        
        ' *** Non uso il comando WRITE perchè aggiunge le " all'inizo e alla fine del testo da scrivare!!!!
        '
        Print #iFile, sCompleteToWrite
        'Write #iFile, sCompleteToWrite
        
    Close #iFile

lExit:
    m_bWriteInProgress = False
    Exit Sub

lError:
    ' *** Devo intercettare l'errore per deimpostare il flag di scrittura in corso!
    Resume lExit

End Sub

' *** Aggiunge del testo ad una stringa (Se specificato bACapo, aggiunge anche un ritorno a capo)
'
Private Function f_AppendTextToString(ByVal sInitString As String, ByVal sTextToAdd As String, ByVal bACapo As Boolean) As String
    
    If bACapo Then sInitString = sInitString & vbCrLf
    sInitString = sInitString & sTextToAdd
     
    f_AppendTextToString = sInitString
    
End Function
Ciao!
__________________
E' quasi tutto relativo!
cisky è offline   Rispondi citando il messaggio o parte di esso
Old 04-11-2003, 19:28   #9
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
mah ....
a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2013, 17:01   #10
Jamester
Member
 
L'Avatar di Jamester
 
Iscritto dal: Feb 2008
Messaggi: 224
E' + o - lo stesso problema che ho io ma visto che non ci ho capito molto, vorrei gentilmente che mi fosse spiegato nel mio caso come fare sapendo che:

C'e' un determinato file chiamato per esempio database.db dove al suo interno ci sono dei dati. Ciascun dato è formato da 5 righe. Ora il problema è che vorrei sovrascrivere questo file ma andando a sostituire solo la quinta riga e lasciando invariate le altre 4 righe precedenti. Usando la funzione replace al 5° rigo riesco a sovrascrivere l'ultimo record come voglio pero' vorrei sapere appunto come sovrascrivere lo stesso file ma lasciando invariate le altre 4 righe. Questa operazione verrà fatta ogni 10 righe in pratica fino alla fine del file. Grazie mille anticipate a chi mi sapra' aiutare!
__________________
CPU: INTEL Core i7 3770 Scheda Madre: Asus P8Z77-M Pro Ram: DIMM DDR3 Corsair 16GB/1600Mhz Vengeance [2x8GB] Scheda Video: nVidia Zotac GTX1060 6GB GDDR5 Scheda Audio: Integrata Realtek 5.1 Hard Disk: 1TB Western Digital [WD1002FAEX] Case: Enermax Midi OSTROG Alimentatore: Seasonic Focus PX-850W Masterizzatori: Asus DRW-24B5ST 24X
Jamester è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti Recensione Realme 15 Pro Game Of Thrones: un ver...
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
Quantic Dream cambia volto: Spellcasters...
Glen Schofield vuole realizzare Dead Spa...
Electronic Arts: lavoratori e sindacati ...
iPad Pro con M5: ecco quanta memoria uni...
L'app desktop di Messenger sarà d...
Così Amazon userà energia ...
Amazon espande Haul: nuovi prodotti e ma...
Google DeepMind e Commonwealth Fusion Sy...
Scontro tra bici elettriche su Amazon: H...
Sfida tra due super scope elettriche: Li...
Il vero Android come l'ha pensato Google...
Rondo avvia la più grande batteri...
Scandalo Sora: video irrispettosi di Mar...
Il nuovo Apple Watch SE 3 al prezzo più ...
Fiducia nell'IA in calo. Una ricerca glo...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:36.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v