24. januar 2006 - 11:30
Der er
5 kommentarer
Ændring i en fil
Jeg vil gerne ændre en fil's indehold som følgende: streng Resultat 1234 Erstatning Erstatning 1235 $1234$ Ersatning Erstatning 1236 Prøv denne $1234$ prøv denne erstatning 1237 $1236$ hvis du vil. prøv denne erstatning hvis du vil
Annonceindlæg fra Computerworld
24. januar 2006 - 15:00
#1
Indlæs filen som tekst fil - linie for linie. For hver linie, så fjerner du alle karakterer karakerer der der tal '0'..'9' og '$' Den nye linie skriver du så ned i en ny tekst fil.
24. januar 2006 - 15:01
#2
Jeg prøver lige igen. filen som tekst fil - linie for linie. For hver linie, så fjerner du alle karakerer der er tal '0'..'9' og '$' Den nye linie skriver du så ned i en ny tekst fil.
24. januar 2006 - 20:59
#4
Hvis vi ser bort fra 1235 kan dette bruges: #include <iostream> #include <algorithm> #include <fstream> #include <map> #include <string> #include <sstream> template <typename T> bool FromString(T &aValue, const std::string &aStr) { std::stringstream ss(aStr); return ss >> aValue; } std::map <int, std::string> MyMap; int main() { std::ifstream F("test.dat"); int i; while(F >> i) { std::string Text; F.ignore(1024, ' '); std::getline(F, Text); MyMap[i] = Text; } std::map <int, std::string>::iterator it; for(it = MyMap.begin(); it != MyMap.end(); ++it) { bool Parse; do { Parse = false; std::string T = it->second; std::string::size_type p1 = T.find('$'); if(p1 != std::string::npos) { std::string::size_type p2 = T.find('$', p1 + 1); if(p2 != std::string::npos) { std::string N = T.substr(p1 + 1, p2 - p1 - 1); int idx; if(FromString(idx, N)) { std::map<int, std::string>::iterator repl = MyMap.find(idx); if(repl != MyMap.end()) { std::string Res = T.substr(0, p1); Res += repl->second; Res += T.substr(p2 + 1); it->second = Res; Parse = true; } } } } } while(Parse); } for(it = MyMap.begin(); it != MyMap.end(); ++it) { std::cout << it->first << ", " << it->second << std:: endl; } }