Witam, chciałem się zapytać czy w C++ można zrobić coś takiego, że usunie wszystko w danej linii co się znajduje przed określonym z góry znakiem lub ciągiem znaków. Np. chciałbym, aby linijka zaczynała się od " <" lub po prostu od "<", lecz u mnie mam np. "02<". I czy właśnie da się zrobić, aby dopóki nie napotka znaku "<" to usuwało wszystko z danej linii? I żeby tak sprawdzało wszystkie linijki.
- Rejestracja:ponad 11 lat
- Ostatnio:prawie 10 lat
- Postów:40
0
n0name_l napisał(a):
Tak, jest to mozliwe.
A czy jest to jakaś funkcja, która ma jakąś konkretną nazwę (aby łatwiej było znaleźć w google) czy raczej to należy zrobić całkiem samemu?
Ponieważ chciałbym zrobić takie coś, że to wczytuje plik .txt i dla każdej linijki sprawdza, czy zaczyna się ona od znaku "<", i jeśli nie, to kasuje to, co w danej linii znajduje się przy tym znakiem.
edytowany 1x, ostatnio: Zajcu93

- Rejestracja:ponad 12 lat
- Ostatnio:ponad 4 lata
- Postów:2412
1
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class FileLinesTruncate {
public:
FileLinesTruncate(ifstream& fileIn, ofstream& fileOut, const string& truncateTo):
fileIn(fileIn), fileOut(fileOut), truncateTo(truncateTo) {
;
}
void TruncateLines() {
string line, new_line;
size_t position;
while(getline(fileIn, line)) {
if((position = line.find(truncateTo)) != string::npos) {
new_line = line.substr(position);
} else {
new_line = line;
}
fileOut << new_line << "\n";
}
}
private:
ifstream& fileIn;
ofstream& fileOut;
string truncateTo;
};
int main(int argc, char** argv) {
if(argc < 3) {
return -1;
}
ifstream inputFile(argv[1]);
ofstream outputFile(argv[2]);
FileLinesTruncate obj(inputFile, outputFile, "<<<");
obj.TruncateLines();
return 0;
}
In:
abcedf<<<asdjaisodas
123123<<<sadasdasd
<<<weqweqwe
asdasdasd
Out:
<<<asdjaisodas
<<<sadasdasd
<<<weqweqwe
asdasdasd
- Rejestracja:ponad 11 lat
- Ostatnio:prawie 10 lat
- Postów:40
0
_13th_Dragon napisał(a):
ofstream outputFile("List2.txt");
Niestety wciąż nic się nie dzieje :/ Nie powstaje żaden nowy plik/stary się nie zmienia.
Może w złym miejscu to robię? Bo zmieniłem to w funkcji "main".
int main(int argc, char** argv) {
if(argc < 3) {
return -1;
}
//ifstream inputFile(argv[1]);
//ofstream outputFile(argv[2]);
ifstream inputFile("List.txt");
ofstream outputFile("List2.txt");
FileLinesTruncate obj(inputFile, outputFile, "<<<");
obj.TruncateLines();
return 0;
}
A kompilator mam Dev-C++ 5.4.2. Może to on coś nie tak robi?
Jednak w Visualu 2012 też nie działa :/
@edit2
Już działa!
edytowany 4x, ostatnio: Zajcu93
Dev-C++
to nie jest kompilator.