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
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;
}
}