|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1399
|
Refactoring in C++
Ciao a tutti, ecco il problema.
Ho scritto nell'ultimo anno una libreria che si chiama Proton per la generazione di audio digitale. Si tratta di una 40ina di files in C++ in cui le implementazioni sono nei file .h (ovvero c'è un solo file .cpp). Tutte le variabili membro iniziano con il prefisso _ (underline) ; ora vorrei convertire quel prefisso in m_ cioè; _var ----> m_var qualcuno mi può suggerire come fare con qualche script (python?). Tenete presente che il carattere _ è presente anche per altre ricorrenze come ad esempio #define NOMECLASSE_H Grazie
__________________
If you eat a live frog in the morning, nothing worse will happen to either of you for the rest of the day. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#3 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
...quindi una cosa "ignorante" potrebbe essere questa: anzitutto usi una funzione che ti dice se un carattere è una lettera o un numero, oppure nessuna delle due, per esempio questa (ne esiste quasi sicuramente una di libreria, ma non mi ricordo come si chiama Codice:
def isalnum(x):
return x in [chr(i) for i in range(ord('0'),ord('9')+1)] \
or x in [chr(i) for i in range(ord('A'),ord('Z')+1)] \
or x in [chr(i) for i in range(ord('a'),ord('z')+1)]
Codice:
for s in oldfile.xreadlines():
i=0
while i<len(s):
if s[i]=='_' and (i==0 or not isalnum(s[i-1])):
s = s[:i]+'m_'+s[i+1:]
i=i+2
else:
i=i+1
newfile.write(s)
Prova, e fammi sapere se funziona. E mi raccomando: lavora su una copia dei file originali!
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu Ultima modifica di Ziosilvio : 04-07-2005 alle 22:12. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1399
|
ZioSilvio,
grazie per lo snip. Al momento non riesco ad usare Python, ma la routine mi sembra facilmente implementabile anche in C++. Appena ho notizie ti faccio sapere. Cec
__________________
If you eat a live frog in the morning, nothing worse will happen to either of you for the rest of the day. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1399
|
Salve,
ho trovato una soluzione abbastanza efficace, che posto se dovesse servire a qualcuno. In sostanza ho creato un filtro per la console in C++: Codice:
// refact.cpp
//
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
void replaceChars (string& modifyMe) {
size_t i = 0;
while (i < modifyMe.size ()) {
if (modifyMe[i] == '_' && (i == 0 || !isalnum (modifyMe[i - 1]))) {
modifyMe.insert (i, "m");
}
else i++;
}
}
int main (int argc, char* argv[]) {
string text;
while (true) {
if (cin.eof ())
break;
getline (cin, text);
replaceChars (text);
cout << text << endl;
}
return 0;
}
// EOF
A presto
__________________
If you eat a live frog in the morning, nothing worse will happen to either of you for the rest of the day. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:37.



















