|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 903
|
[C++]modificare file di testo
in rete ho imparato a scrivere e leggere i files ma non trovo nulla sulla modifica.
io ho un file di testo molto lungo e complicato pieno di parole,frasi e numeri. devo cercare la parola "atomo" dentro questo file e modificarla con "molecola". come posso fare? (il motivo per cui voglio fare il programma c++ è perchè ho 185 files su cui fare questa stessa operazione)
__________________
MB:Asus Rog Strix B450-F Gaming - Cpu:AMD Ryzen 5 2600 - RAM:2x8Gb DualCh DDR4-2400MHz Patriot Viper Elite - SkGrafica:msi GeForce GTX 1050Ti 4GB - SSD: 2 x Samsung 970 EVO 1TB nvme M.2 in RAID0 Alim: EVGA B3 750W Case: Corsair airflow 750D |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Più che un sw C++ ti converrebbe uno script; ad esempio con sed te la caveresti elegantemente.
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 903
|
saper fare queste cose in c++ mi tornerà utile per la mia tesi, dunque vorrei continuare a provare, e devo dire che ci sono quasi riuscito se non per uno strano crash.
ora sto modificando i files di un gioco di guerra e ho scritto questo codice ; int main() { ... while(f1.good()) { getline(f1, s); if (s.substr(1,9)=="peacetime") { s="#"+s; } f2<<s<<endl; } ... return 0; } il programma non crasha se metto s.substr(0,9) e questo perchè dovrebbe succedere qualcosa di brutto quando legge la stringa incriminata: ------------------------------------------------------- defense_lobby = 4 interventionism = 1 (QUI C'E' TAB) peacetime_ic_mod = 0.6 nationalprovinces = { 359 362 329 361 360 334 } ownedprovinces = { 359 362 361 360 } controlledprovinces = { 359 362 361 360 } -------------------------------------------------------- questo è la porzione di file di testo che sto cercando di modificare, la linea peacetime_ic_mod deve sostituirsi con #pacetime_ic_mod ma come vedete nel file di testo quella linea è preceduta da uno spazio bianco che è una tabulazione...substr(1,9) crasha qui... come faccio a dire a substr di partire da dopo la tabulazione invece che dal carattere 0?
__________________
MB:Asus Rog Strix B450-F Gaming - Cpu:AMD Ryzen 5 2600 - RAM:2x8Gb DualCh DDR4-2400MHz Patriot Viper Elite - SkGrafica:msi GeForce GTX 1050Ti 4GB - SSD: 2 x Samsung 970 EVO 1TB nvme M.2 in RAID0 Alim: EVGA B3 750W Case: Corsair airflow 750D |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 903
|
ho risolto.
ero stato talmente sfortunato che la stringa più corta del file è di 9 caratteri quindi substr(0,9) funzionava e substr(1,9) crashava come incontrava una stringa di 10 caratteri. ora ho messo una condizione in piu nell'if e tutto funziona
__________________
MB:Asus Rog Strix B450-F Gaming - Cpu:AMD Ryzen 5 2600 - RAM:2x8Gb DualCh DDR4-2400MHz Patriot Viper Elite - SkGrafica:msi GeForce GTX 1050Ti 4GB - SSD: 2 x Samsung 970 EVO 1TB nvme M.2 in RAID0 Alim: EVGA B3 750W Case: Corsair airflow 750D |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 903
|
il prossimo e ultimo passo che dovrei fare è aprire uno ad uno tutti i files della directory come si può fare?
non posso scrivere per 185 volte ifstream f1("files_originali\\italy.txt"); ofstream f2("files_modificati\\italy.txt");
__________________
MB:Asus Rog Strix B450-F Gaming - Cpu:AMD Ryzen 5 2600 - RAM:2x8Gb DualCh DDR4-2400MHz Patriot Viper Elite - SkGrafica:msi GeForce GTX 1050Ti 4GB - SSD: 2 x Samsung 970 EVO 1TB nvme M.2 in RAID0 Alim: EVGA B3 750W Case: Corsair airflow 750D |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:12.



















