Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703

    modifica stringa su file

    questa è la situzione:

    leggo da un file ti testo(.txt) delle informazioni relative a dei campi; ad esempio:

    CODICE: 34
    MATERIALE: lana

    ecc ecc..

    ora, ho caricato il file in modalità scrittura ed ho tutto il contenuto sia in un array di caratteri sia una stringa(a seconda di cosa mi servirà).
    L'utente ora mi fornisce il campo da modificare(come potete notare è sempre identico), cosichè attraverso la funzione find della classe string ricerco da che posizione(ritorna un numero la funzione) inizierò a scrivere...ora il problema è sia la pulizia del dato (ex. lana) che la successiva riscrittura..mmm, qualche idea?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    La problematica e' comune a tante richieste su questo e su altri forum.

    Se il file e' di testo e i dati sono organizzati in linee di lunghezza variabile, non hai altra soluzione che riscrivere in un file temporaneo tutti i dati non modificati e quelli modificati rispetto al file originario e, in seguito, eliminare il file originale e rinominare quello temporaneo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    mmm, ok.. quindi quello che mi dici tu è:

    1) Leggo il file originale fino a EOF e lo memorizzo in un tipo string(o meglio in un array di caratteri?)

    2) prendo da input la modifica dell'utente

    3) Inizio a riscrivere un nuovo file temporaneo, l'unica cosa che non ho capito è questa.. ad esempio:

    codice:34
    materiale:lana
    spedizionerdinaria

    mettiamo che l'utente vuole modificare la spedizione,quindi di fatto vuole modificare solo "ordinaria", come faccio via codice a dirgli riscrivi fino ai ":" successivi alla parola "spedizione" e inizia a scrivere dalla posizione che ti indico?

    Io avevo pensato di trovare attraverso la funzione find il punto giusto(presumo ci sarà una funzione della classe string che fa al caso mio,intendo trovando l'ultimo carattere della stringa data in paragone), mi dovrebbe restituire un numero intero, così inizio un ciclo... e qua sorge il problema, come impostarlo utilizzando il risultato derivante da find?!? mi faresti un esempio?mettendo il caso che devo riscrivere tutti i primi 20 caratteri e da li in poi scrivere quello che gli dico io..
    grazie, se hai link con problemi simili, dimmi pure ^^

  4. #4
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    So che non sarò molto d'aiuto, ma non sarebbe tutto più semplice se ricorressi ad un database?

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    lo farei molto volentieri credimi ^^ ma sono vincolato dalle specifiche che il programma dovrà assumere.
    Se riuscite a darmi una mano ..perchè sono abbastanza confuso su questa parte :master:

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se devi leggere tutto il file in un array di stringhe prima di effettuare le modifiche, dipende dalla grandezza del file. Se non e' tanto grande (parliamo di un file di testo di qualche mega) allora va bene, altrimenti occupare molta memoria non e' molto funzionale.

    Dato che le modifiche le effettuerai a partire da una chiave di ricerca (presumo, il codice), forse e' piu' conveniente, dopo aver inserito il codice, leggere il file fino ai dati cercati e visualizzarli. A questo punto, dovresti memorizzare le modifiche e solo quando queste risultano definitive, riportarle in un secondo file di testo in cui scriverai i dati non modificati presi dal file originale rileggendolo piu' i dati modificati che hai in memoria. Alla fine cancellerai il primo file e rinominerai il secondo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    premessa1: il file pesa pochissimo.

    premessa2: il fatto di aver inserito ID è stato solo a scopo d'esempio.


    Io ho capito quello che tu intendi dire..ma il problema è uno solo:

    Devo leggere riga per riga giusto?Posso usare la funzione fgets.. ma come faccio a dirgli leggi fino alla riga 2, saltala e passa avanti a leggere????
    Mi servirebbe propio un esempio pratico via codice perchè se no non riesco ad interpretarlo correttamente, pur avendo capito il concetto.

    Ex:
    colore:verde
    pezzi:4
    data_spedizione: 13-1-09

    Ok, creo l'oggetto di flusso stream
    codice:
    #include <iostream>
    #include <fstream>
    int main()
    {
       string str_temporanea;  // stringa temporanea in cui sono contenuti i dati invariati;
       stringa str_modifica // stringa in cui è contenuta la modifica che ho già presumibilmente preso da input;
       fstream apri_file("1234.txt",ios::in);
       fgets..   //che cosa devo mettere qua ?? 
       
    
       return 0;
    }
    Ho già guardato la
    reference di fgets ma è in inglese e purtroppo faccio parecchia fatica.

    reference di fgets

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se il file non e' grande, lo puoi leggere in un array di stringhe, meglio ancora, in una lista.

    Il fatto dell'ID non e' un dettaglio. Se devi modificare dei dati che sono organizzati in record/campi, devi averne uno per la ricerca. Altrimenti, come farai a dire voglio modificare questo o quell'altro?

    Il tuo problema attuale, comunque, non e' quello della modifica del file (che e' il risultato di tante parti di programma) ma della lettura del file in memoria.

    Quando hai un problema nel forum, devi indicare la parte che non sai fare e non tutto il programma completo (di cui non ti daro' nessun esempio perche', per farlo bene, significa impiegare un giorno ...).

    Quindi, riparti dalla semplice lettura di un file in memoria e decidi se farlo con il C++ (dato che hai usato fstream) o in C (dato che vuoi utilizzare la fgets).

    E per programmare in C/C++ (a parte l'inglese che sarebbe necessario ...) dotati di un libro perche' e' impossibile imparare senza o imparare con qualche indicazione di un forum.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    ce lo fatta ^^ sia la lettura riga per riga e la stampa su file(con controllo della stringa tramite una funzione della classe string) e il successivo inserimento della "modifica". Grazie comunque dei consigli bye

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 © 2024 vBulletin Solutions, Inc. All rights reserved.