Oppure

Loading
24/04/09 14:21
shpalman62
Salve a tutti. Ho cercato nei topic ma non ho trovato nulla. Premetto che sono una schiappa totale. Problema: ho un file in formato txt contenente 1000 records ognuno composto da 22 campi tutti separati da ";". Ogni record è su una riga. Il primo campo è costituito da un codice. Ho un secondo file in formato txt che contiene x record formati da 40 campi. Devo verificare se ogni ogni codice di ogni record del 2° file sia presente sul 1° file. Se è presente allora devo modificare il valore del 22° campo del 1° file col valore del 16° campo del 2° file. Il file modificato deve essere salvato. Non so se mi sono spegato bene. Fate conto che abbia un listino prezzi e solo alcuni articoli debbono cambiare il prezzo con quello presente su di un'altro file. Grazie a tutti e saluti.
aaa
24/04/09 15:16
punkettone90
si può fare ma quello che mi chiedo è: vale la pena usare come database un file txt?
visto che i record sono molti e pure i campi perchè non usi un database come mysql o access?

tempo fa mi sono trovato a dover fare anch'io un lavoro del genere e l'idea di potermi appoggiare a delle query mi ha aiutato moltissimo e mi ha fatto risparmiare un sacco di codice.

Io (e quasi tutti penso) ti consiglio di usare un database, dopo scegli tu...
aaa
24/04/09 15:17
Il Totem
:-| emh... sì :rofl:
Per leggere un file testuale, si usa StreamReader, o uno dei metodi statici di IO.File: ad esempio IO.File.ReadAllText("file";) restituisce una stringa contenente tutto il file; IO.File.ReadAllLines("file";) restituisce un array di stringhe dove ogni stringa rappresenta una riga del file. Ti consiglio di usare uno StreamReader, così eviti di memorizzare i 1000 record nella RAM.
Per spezzare la stringa sui ";", ossia ottenere ogni singolo campo separato dai punti e virgola, si usa String.Split(";";), richiamato dalla stringa che vuoi spezzare (in questo caso la riga del file appena letta).
Per scrivere sul file si usa StreamWriter.
Per scrivere un codice così ci metterei un po' di tempo, quindi ti lascio cercare un po' sul materiale che ti ho fornito.
aaa
24/04/09 15:29
shpalman62
Ti ringrazio per la risposta, ma il problema è che entrambi i files mi vengono forniti così. Il primo file deve rimanere di quel formato perchè c'è già un programma che lo utilizza in lettura. Non esiste proprio un'alternativa? Ho provato ad utilizzare il metodo file.writealltext ma c'è qualcosa che mi sfugge. Non riesco a sostituire i dati, ma me li accoda. grazie comunque
aaa
24/04/09 15:55
shpalman62
Mi ero dimenticato di dire (ma credo che non abbia importanza) che il 2° file è ad accesso casuale.
Questo è quello che avevo fatto io ma come si può vedere non va bene:
Così non funziona, e non riesco a trovare una soluzione.
______________________________________________________________________
FileOpen(1, File2, OpenMode.Random, , , Len(file))
Do Until EOF(1)
FileGet(1, file)
numord1 = UCase(Trim(file.file01))
prezzo = file.file16

Using leggi As New Microsoft.VisualBasic.FileIO.TextFieldParser(file1)
leggi.TextFieldType = FileIO.FieldType.Delimited
leggi.SetDelimiters(";";)
Dim currentrow As String()

While Not leggi.EndOfData
currentrow = leggi.ReadFields()
Dim currentfield As String
For Each currentfield In currentrow
n = n + 1
campo(n) = currentfield
numord2 = UCase(campo(2))
If numord2 = numord1 Then campo(22) = prezzo
If n < 22 Then
My.Computer.FileSystem.WriteAllText(file2, campo(n) & ";", True)
Else
My.Computer.FileSystem.WriteAllText(file2, campo(n), True)
My.Computer.FileSystem.WriteAllText(file2, vbCrLf, False)
n = 0
End If
Next
End While
End Using
Loop
aaa
24/04/09 16:24
shpalman62
X Totem.
Ti ringrazio. La tua soluzione mi sembra molto interessante. ci proverò e ti farò sapere. Grazie ancora.
aaa