Usuwanie wszystkiego przed danym znakiem.

0

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.

1

Tak, jest to mozliwe.

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.

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
0

Serdecznie dziękuję. A jeszcze mam jedno pytanie, bo za bardzo nie wiem gdzie dać nazwę pliku. Ponieważ próbowałem tak:

    ifstream inputFile("List.txt");
    ofstream outputFile("List.txt"); 

Ale niestety nic się w pliku nie zmieniło :/

0
ofstream outputFile("List2.txt"); 
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?

@Edit

Jednak w Visualu 2012 też nie działa :/

@edit2

Już działa!

0
    if(argc < 3) {
        cout<<"BLONDYNO, PODAJ DWA PARAMETRY!"<<endl;
        system("pause");
        return -1;
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1