Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37

Discussione: modifica file di testo

  1. #1

    modifica file di testo

    Salve,
    volevo sapere come fosse possibile modificare un file di testo. Ho capito che devo crearne uno nuovo, con le parti aggiornate, e poi rimpiazzarlo. Il fatto è che da codice non ci riesco.
    Il mio file di testo è fatto da tre numeri, uno su ogni riga:
    1
    6
    7
    Io devo modificare il numero 6 e scrivere 5!
    Help me pplease !
    ringrazio anticipatamente

  2. #2
    potresti anche banalmente leggere tuute le righe.
    per ogni riga controllare il valore.
    e se è sei scrivere 5 nel nuovo file.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Quote Originariamente inviata da DvdDelphi Visualizza il messaggio
    Il fatto è che da codice non ci riesco.
    Posta il codice e dicci cosa succede.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Quote Originariamente inviata da fermat Visualizza il messaggio
    potresti anche banalmente leggere tuute le righe.
    per ogni riga controllare il valore.
    e se è sei scrivere 5 nel nuovo file.
    Il fatto è che dovrei automatizzare il tutto, quindi non mi sembra una giusta via

  5. #5
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Posta il codice e dicci cosa succede.
    codice:
    public boolean RiponiBici(int Tappa){
            int conta = 1;
            try 
             {
               File negozio= new File("Negozio.txt");
                
               if (tappe.exists())
                   {
                   String riga;
                   FileReader fr = new FileReader(negozio);
                   BufferedReader br = new BufferedReader(fr);
                   riga = br.readLine();
                   while(riga != null){
                       if(conta == Negozio1){
                           int bici = Integer.parseInt(riga);
                           if((bici+1)>5) //5 è il numero max di bici che può ospitare
                               return false;
                               else return true;
                       }
                       else{
                           riga = br.readLine();
                           conta++;
                       }                  
                   }
                   }
             }
            catch (IOException t) {
                t.printStackTrace();
            }
            return false;
        }
    Praticamente nel file di testo ho il numero di biciclette che si trovano in un negozio, quindi quando uno la compra devo fare bici-- e quindi dovrei salvare il valore !!! Il conta mi fa capire di quale negozio si fa riferimento: negozio1 riga 1, negozio2 riga2 ecc.
    Come faccio a salvare il valore nuovo delle biciclette e salvarlo? spero di essere stato chiaro
    grazie !

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    All'inizio avevi detto:

    Quote Originariamente inviata da DvdDelphi Visualizza il messaggio
    Ho capito che devo crearne uno nuovo, con le parti aggiornate, e poi rimpiazzarlo.

    Ed è corretto. Quindi, se sai che devi creare un nuovo file (poi, magari, possiamo vedere anche una soluzione alternativa, che comunque non si discosta molto), allora non puoi semplicemente leggere e buttare via le righe se non sono quelle che ti interessano (che è ciò che stai facendo).

    La procedura da seguire è la seguente:

    1) Apro il file in lettura
    2) Apro un secondo file in scrittura (sarà quello che conterrà le modifiche e che andrà a sostituire il primo)
    3) Leggo il primo file
    4) Se la riga non è quella da modificare, la riscrivo pari pari nel secondo file
    5) Se la riga è da modificare, scrivo nel secondo file la riga modificata
    6) Alla fine, sostituisco il primo file col secondo


    Quindi, per prima cosa prova ad implementare i punti 2, 4 e 5. Il sesto, per il momento, possiamo anche lasciarlo da parte e vederlo successivamente. Vediamo se riesci a ricostruire un nuovo file, che sia come il primo, ma che contenga la modifica voluta.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    codice:
    public void RiponiBici(int Tappa){
            int conta = 1;
            try 
             {
               File tappe = new File("Negozio.txt");
               File tappeCopia = new File("NegozioCopia.txt");
                
               if (negozio.exists())
                   {
                   String riga;
                   FileReader fr = new FileReader(Negozio);
                   BufferedReader br = new BufferedReader(fr);
                   FileWriter fw = new FileWriter(NegozioCopia);
                   BufferedWriter bw = new BufferedWriter(fw);
                   
                   riga = br.readLine();
                   while(riga != null){
                       if(conta == Tappa){
                           int bici = Integer.parseInt(riga);
                           if(bici >= 1){
                               bici--;
                               bw.write(bici);
                               bw.newLine();}
                           else {
                               JOptionPane.showMessageDialog(null,"Zona piena, prova da un'altra parte");break;}
                       }
                       else{
                           bw.write(riga);
                           bw.newLine();
                           riga = br.readLine();
                           conta++;
                       }                  
                   }
                   }
             }
            catch (IOException t) {
                t.printStackTrace();
            }
        }
    Ok sono arrivato al punto 5, e come hai detto tu il 6 è da vedere insieme.
    Ho creato due file di testo. Dovrei crearne un terzo per scambiare i nomi dei file !
    br.close();
    bw.close();
    NegozioCopia.renameTo(Negozio);
    Negozio.renameTo(NegozioCopia);????

    Come fare?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Ok, sei quasi arrivato alla fine.
    Manca ancora qualcosa, se ci pensi bene: la chiusura dei file. Quando si apre un file (che lo si apra in lettura o scrittura), alla fine va chiuso. Sempre.

    O, meglio, si devono chiudere gli stream di input/output (ovvero, il BufferedReader ed il BufferedWriter).

    Una volta che i due file sono stati chiusi (e, attenzione, non prima di chiuderli!), per rimpiazzare il primo col secondo si effettuano le seguenti due operazioni:

    1) Si cancella il prmio file (quello "vecchio")
    2) Si rinomina il secondo file, assegnandogli il nome del primo.

    Fine.

    Tradotto in codice:

    codice:
    // Cancello il file "vecchio" (tu hai già un oggetto File che si chiama tappe)
    tappe.delete();
    
    // Rinomino il secondo file assegnandogli il nome del primo
    tappeCopia.renameTo( tappe );

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Ciao, grazie per la risposta, ma rimane ancora un problema. Quando cancello il file di testo originale alla prossima esecuzione avrò solo un file di testo nella mia cartella. Io faccio questo:

    File tappe = new File("Negozio.txt");
    File tappeCopia = new File("NegozioCopia.txt");

    ovviamente il file NegozioCopia non lo troverà più !

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    E quindi?
    Nel tuo scenario iniziale hai un solo file che va modificato.
    Alla fine dell'esecuzione avrai un solo file (quello "originale" modificato).
    Mi pare sia esattamente quanto richiesto... o ci sono altre informazioni che hai sottinteso e che non colgo?

    Tieni presente, inoltre, che quando tu dichiari un oggetto File, questo è solo un "segnaposto" (cioè, è solo un nome)... il file reale puntato da quel nome può esistere o meno, a Java non interessa al momento della creazione dell'oggetto (tant'è che la classe File possiede il metodo exists() che dice se il file puntato da quell'oggetto esiste realmente oppure no). Eventuali "eccezioni" le otterresti se tu cercassi di leggere da quel file e quel file non esistesse... ma tu non ci devi leggere, ci devi scrivere. E, come per la situazione iniziale, se quel file non esiste al momento dell'apertura in scrittura, ci pensa Java a crearlo.

    Ma non ho capito quale sia il tuo dubbio.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.