Condividi:
Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!
Moderatori: Anthony47, Triumph Of Steel, archimede
di RunDLL » 29/01/06 13:30
Ciao a tutti e grazie per leggere la mia richiesta: sono alle prima armi con Visual Basic e mi trovo davanti alla necessità di creare un programma che dovrebbe fare le operazioni cui vado ad illustrare.
Utilizzo un programma che mi crea un file TXT dove vengono archiviati dei prodotti, in particolare due campi: 1 codice prodotto 2 quantità.
Il file ha il formato così: il campo codice sempre di 9 caratteri (se il codice è di meno caratteri aggiunge automaticamente tanti 0 fino a raggiungere 9 cifre), 4 spazi, un punto e virgola, la quantità sempre di 6 caratteri (stesso discorso dei 0 del codice) e un punto e virgola. Faccio un esempio, ammettiamo che ho il prodotto di codice 123 di cui ne ho 4 nel file troverò questa forma:
000000123 ;000004;
Ogni prodotto aggiunto verrà inserito nel file in una nuova riga, esempio per 3 prodotti:
000000123 ;000004;
000001345 ;000010;
000909874 ;000150;
Non c'è altro modo per impostare questo file che abbia un'altra forma, esce così e basta.
Ovviamente i prodotti potrebbero essera anche migliaia.
Io dovrei importare tale file in un'altro programma che accetta ESCLUSIVAMENTE un file che abbia 19 caratteri e codice e quantità uniti. Come vedete codice + quantità sono di 15 caratteri.
Per cui il programma che vorrei realizzare mi dovrebbe fare queste cose:
1) eliminare i quattro spazi + punto e virgola tra codice e quantità;
2) eliminare il punto e virgola in fondo alla riga;
3) aggiungere tanti zeri quanti caratteri mancano ad arrivare a 19 totali (in questo caso 4 zeri) tutti a sinistra ovvero davanti a codice;
4) crearmi un file con le modifiche apportate non che mi modifichi il file sorgente.
Non so se chiedo troppo ma siccome mi interesserebbe capire anche il meccanismo vorrei trovare una buon'anima che oltre a darmi il codice mi illustrerebbe in maniera particolareggiata le istruzioni perchè vorrei imparare. Ovviamente se non è troppo disturbo o troppo complicato. Un grazie a tutti e saluti.
-
RunDLL
- Utente Senior
-
- Post: 351
- Iscritto il: 14/01/04 13:25
di RunDLL » 29/01/06 13:32
Vedo che il forum non mi da i 4 spazi tra codice ed il primo punto e virgola ma ci sono ben 4 spazi.
-
RunDLL
- Utente Senior
-
- Post: 351
- Iscritto il: 14/01/04 13:25
di RunDLL » 29/01/06 13:58
Scusate mi ero dimenticato di fare l'esempio del risultato per far capire meglio:
nel caso dell'esempio dei 3 prodotti io come risultato finale mi vorei ritrovare un file così composto:
0000000000123000004
0000000001345000010
0000000909874000150
Grazie ancora a tutti.
-
RunDLL
- Utente Senior
-
- Post: 351
- Iscritto il: 14/01/04 13:25
di hydra » 30/01/06 19:14
Che versione di visualbasic utilizzi? Se vuoi ti posso fare degli esempi in VBNet, poi comunque se usi VB6 la traduzione non è molto difficile (io non lo utilizzo da parecchio tempo
)
- Codice: Seleziona tutto
Dim FileIn As System.IO.StreamReader ' Variabile lettura file
Dim FileOut As System.IO.StreamWriter ' Variabile scrittura file
Dim RigaIn, RigaOut As String ' Variabile lettura riga dal file
Dim RigaC() As Char ' Array di char per trasformazione riga
Dim FileSel As New OpenFileDialog ' Creazione istanza finestra selezione file
With FileSel ' Controllo eventi
.Filter = "File di testo|*.txt"
.ShowDialog() ' Mostro il controllo
If .FileName <> "" Then
' Il file è stato selezionato
FileIn = New System.IO.StreamReader(.FileName)
FileOut = New System.IO.StreamWriter("Prova1.txt")
Do
Try
RigaIn = FileIn.ReadLine ' Leggo riga dal file
RigaC = RigaIn.ToCharArray ' Copio riga nell'array
RigaOut = ""
Dim I As Byte
For I = 0 To RigaIn.Length - 1
If RigaC(I) <> ";" And RigaC(I) <> " " Then
RigaOut += RigaC(I)
End If
Next
' Formattazione riga
RigaOut = RigaOut.PadLeft(19, "0")
FileOut.WriteLine(RigaOut)
Catch
' Fine del file
Exit Do
End Try
Loop
FileIn.Close()
FileOut.Close()
Else
MsgBox("Selezionare file uscita", MsgBoxStyle.Critical, "")
End If
End With
Alla fine il risultato è:
0000000000123000004
0000000001345000010
0000000909874000150
Nota che è stata fatta una cosa in fretta, giusto per vedere come funziona. Il concetto è che ti devi creare un file in lettura, uno in scrittura, da quello in lettura leggi una riga alla volta, togli spazi e ; e poi formatti aggiungendo gli zeri.
-
hydra
- Moderatore
-
- Post: 7007
- Iscritto il: 19/07/04 08:06
- Località: Vallis Duplavis
di RunDLL » 30/01/06 19:54
Ciao e grazie per la risposta. Utilizzo VB6. Mi potresti dire dove ora mettere quel codice? Va bene in un commandbutton all'evento "click" oppure in un modulo in apertura Sub Main? Grazie di nuovo ed un saluto.
-
RunDLL
- Utente Senior
-
- Post: 351
- Iscritto il: 14/01/04 13:25
di hydra » 30/01/06 20:20
Beh, non ha importanza dove lo metti. Se vuoi fare le cose fatte bene potresti crearti un form con 3 button, uno per la scelta del FileIn, uno per la scelta del FileOut e l'ultimo per la conversione. Non credo comunque che tu lo possa semplicemente copiaincollare, in quanto questo è scritto in VBNet e utilizza le classi del NET Framework. Dovresti provare a tradurlo. Io al momento non ho la possibilità di farlo perchè il VB6 non ce l'ho.
-
hydra
- Moderatore
-
- Post: 7007
- Iscritto il: 19/07/04 08:06
- Località: Vallis Duplavis
di RunDLL » 30/01/06 20:45
Ah... Ma io così bravo non sono
Proverò a studiare un po' la questione. comunque grazie sei stato molto gentile. Ciao
-
RunDLL
- Utente Senior
-
- Post: 351
- Iscritto il: 14/01/04 13:25
di Vittorino » 02/03/06 18:16
Ti ho dato una risposta nel vecchio blog
Prova a guardarla
Comunque si dovrebbe risolvere in modo g...
In Open Office c' è l' opzione: Definito dall' utente
metti il numero di cifre nella prima colonna 13 zeri
metti il numero di cifre nella seconda colonna 6 zeri
metti il numero di cifre nella terza colonna 19 zeri
Motiplichi A per 1000000 (tanti zeri quante sono le cifre della casella B
Sommi B
Cioè
A=0000000000123
B=000456
C=A*1000000+B
C=0000000000123000456
Metti 1 seguito da tanti zeri quante sono le cifre in B
Sappiami dire se funziona
-
Vittorino
- Utente Senior
-
- Post: 138
- Iscritto il: 27/02/06 16:13
Torna a Programmazione
Topic correlati a "Programma per modificare un file":
Chi c’è in linea
Visitano il forum: Nessuno e 11 ospiti