Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    65

    [c++] tagliare parte di un file

    avrei un problema: dato il file "file.txt" contentente i seguenti dati

    rosso
    nero
    blu
    giallo

    vorrei passar ad un file "file.txt" contentente:

    rosso
    blu
    giallo

    e vorrei ke l'eliminazione di "nero\n" nn porti alla riscrittura del file, ma SOLO all'eliminare questo dato.

    path="file.txt"
    fstream rfile(path,ios::in|ios:ut);
    if(rfile) {
    string s;
    while(!rfile.eof()) {
    getline(rfile,s);
    if(s=="nero") {
    //che codice??????
    }
    }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [c++] tagliare parte di un file

    Originariamente inviato da eva01iol
    e vorrei ke l'eliminazione di "nero\n" nn porti alla riscrittura del file, ma SOLO all'eliminare questo dato.
    Non puoi fare una cosa del genere ... questo vale in generale, indipendentemente dal linguaggio o dal sistema operativo: non puoi togliere o inserire roba in mezzo ad un file.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Fox82
    Registrato dal
    Feb 2002
    Messaggi
    459
    In realtà potresti giocare un po con le funzioni fseek (che sposta la posizione corrente all'interno di un file) e ftruncate (che ridimensiona il file ad una dimensione specificata).

    Ovviamente devi comunque giocare con dei buffer supplementari, e parte del file va comunque riscritto. Nel tuo caso, potresti leggere in un buffer a partire dal primo byte dopo il testo che vuoi eliminare, poi posizionarti sul primo byte del testo da eliminare e riscrivere sopra il buffer.
    Infine troncare il file per eliminare i byte eccedenti.

    Ovviamente ti risparmia solo in parte la riscrittura del file...
    Linux user number 403381

    Stop TCPA!

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Non puoi fare una cosa del genere ... questo vale in generale, indipendentemente dal linguaggio o dal sistema operativo: non puoi togliere o inserire roba in mezzo ad un file.
    Non sono del tutto d'accordo. Si può fare in C++ utilizzando record ad accesso casuale.
    Il C++ offre le classi ifstream e ofstream che servono proprio a questo.
    Se utilizzi questa tecnica puoi benissimo fare ciò
    Documentati, o, se non ci riesci, posso farti un esempio.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da XWolverineX
    Non sono del tutto d'accordo. Si può fare in C++ utilizzando record ad accesso casuale.
    Il C++ offre le classi ifstream e ofstream che servono proprio a questo.
    Se utilizzi questa tecnica puoi benissimo fare ciò
    Documentati, o, se non ci riesci, posso farti un esempio.
    Ma non puoi "inserire" o "togliere" byte da un file!!!! E per inserire o togliere intendo che il contenuto successivo si sposti in avanti o indietro ... e questo non è possibile.

    Cioè non puoi dire: "spostati alla posizione x" e poi "inserisci tot bytes" o "togli tot bytes".

    Quello che puoi fare al massimo è:
    a) sovrascrivere dati sul file
    b) accodare dati al file
    c) troncare il file ad una certa posizione (tramite funzioni non standard, però) o anche troncarlo a 0 (con le solite funzioni di creazione).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Originariamente inviato da andbin
    Ma non puoi "inserire" o "togliere" byte da un file!!!! E per inserire o togliere intendo che il contenuto successivo si sposti in avanti o indietro ... e questo non è possibile.

    Cioè non puoi dire: "spostati alla posizione x" e poi "inserisci tot bytes" o "togli tot bytes".

    Quello che puoi fare al massimo è:
    a) sovrascrivere dati sul file
    b) accodare dati al file
    c) troncare il file ad una certa posizione (tramite funzioni non standard, però) o anche troncarlo a 0 (con le solite funzioni di creazione).
    Si questo si, ho frainteso la tua risposta.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    65
    capito..quindi in ogni caso il file va riscritto in parte.
    Ma mi spiegate come mai allora windows può far 'ste cose?
    cioè: quando win scrive un grosso file, lo fa solo dove il disco ha spazio, e per questo può esser ke il file sia fatto a pezzi; proprio per questo ogni tot bisogna deframmentare

    vista questa cosa, cioè ke i file posson esser fatti a pezzi, direi quindi tra ogni "pezzo" ci deve esser un "puntatore" di collegamento. Non si può in qualche modo usar questa funzionalità? o si tratta di follia?

    altra cosa: se mi trovassi a lavorar con file di 4GB, risulterebbe oneroso dover riscriver interi GB solo per la modifica di poki byte..volete dirmi ke il C++ nn ha qualke strumento per i file grossi?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sei fuori strada ... quello di cui parli e' l'organizzazione di un file system non di un singolo file.

    Un file system provvede ad allocare "blocchi" (ad esempio di 4 K) e li "collega" tra loro quando li dedica ad un file. Non stiamo parlando di 4 caratteri ma di 4 K ...

    Se il file e' di 4 G, molto probabilmente questo ha una sua struttura interna che garantisce l'efficienza degli aggiornamenti ... (come per un database) ...

  9. #9
    In quel caso (file molto grossi) si ricorre all'indicizzazione (utilizzando un file con record a lunghezza fissa)
    Experience is what you get when you don’t get what you want

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.