Condividi:        

Programma per modificare un file

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

Programma per modificare un file

Postdi 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.
Avatar utente
RunDLL
Utente Senior
 
Post: 351
Iscritto il: 14/01/04 13:25

Sponsor
 

Postdi 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.
Avatar utente
RunDLL
Utente Senior
 
Post: 351
Iscritto il: 14/01/04 13:25

Postdi 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.
Avatar utente
RunDLL
Utente Senior
 
Post: 351
Iscritto il: 14/01/04 13:25

Postdi 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 :D)

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. ;)
Avatar utente
hydra
Moderatore
 
Post: 7007
Iscritto il: 19/07/04 08:06
Località: Vallis Duplavis

Postdi 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.
Avatar utente
RunDLL
Utente Senior
 
Post: 351
Iscritto il: 14/01/04 13:25

Postdi 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. :D
Avatar utente
hydra
Moderatore
 
Post: 7007
Iscritto il: 19/07/04 08:06
Località: Vallis Duplavis

Postdi 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
Avatar utente
RunDLL
Utente Senior
 
Post: 351
Iscritto il: 14/01/04 13:25

Unire due celle in excel

Postdi 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