[C++] Modificare carattere in un file

giuscri
Vorrei scrivere un programma che preso un file di testo del tipo

quindi il modo migliore per polemizzare con i dis-
ssidenti polemica —— seppure a tratti addirittura sferzante —
sia per così dire relegata sullo sfondo, som-
mersa da


lo modifichi come

quindi il modo migliore per polemizzare con i disssidenti
polemica —— seppure a tratti addirittura sferzante —
sia per così dire relegata sullo sfondo, sommersa da


cioé che riscriva il rimando a capo.

Ma non saprei da dover partire per scriverlo. Qualche suggerimento su come pensarlo, almeno?

EDIT: in generale ho capito che non saprei modificare un carattere/intervenire all'interno di un file. Bene.

Ringrazio,
Giuseppe

Risposte
apatriarca
Puoi iniziare a cercare nel testo il carattere '-' seguito da un carattere di a capo. Puoi provare a scrivere un programma che copia tutti i caratteri diversi da '-'. Se trova questo carattere verifica se il successivo carattere è uguale a '\n' e se lo è ignora entrambi i caratteri. In caso contrario copia entrambi i caratteri sul file. Direi che può essere un buon punto di partenza anche se forse non perfetto.

giuscri
"apatriarca":
Puoi provare a scrivere un programma che copia tutti i caratteri diversi da '-'.


Si, ma la questione è che non riesco a modificare direttamente il file, ma al piû a farne solo una copia -il che, ok, è abbastanza facile.

giuscri
Forse potrei provare con le regex!

http://www.cplusplus.com/reference/regex/match_replace/

Anche se rimane il problema di come riesca a sovrascrivere sul file la stringa modificata.

...domani vedo se riesco ad andare avanti in qualche modo.

apatriarca
Una possibile soluzione potrebbe essere la seguente:
1. Scrivere le modifiche in un nuovo file
2. Cancellare il file originale
3. Rinominare il nuovo file

In alternativa puoi anche leggere interamente il contenuto del file per poi sovrascriverlo con la nuova versione.Questa soluzione rischia tuttavia di danneggiare il file originario in caso di crash durante la scrittura.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.