MyTetra Share
Делитесь знаниями!
Поиск и замена текста в файле
Время создания: 15.07.2017 16:28
Раздел: Computer - Programming - C++ - Lessons

/*

15.07.2017

Парсим текстовый файл и перед всеми найденными <ENTER>

вставляем символ новой строки.

Если оный уже присутствует, то идем дальше до следующего <ENTER>


Пример:

Файл:

JPcjwp40v]<ENTER>wlev[cq30]9fm<ENTER>

<ENTER>pebj<ENTER><ENTER>09 v2058OJibyc2<<ENTER>


Должен отформатироваться в:

JPcjwp40v]

<ENTER>wlev[cq30]9fm

<ENTER>

<ENTER>pebj

<ENTER>

<ENTER>09 v2058OJibyc2<

<ENTER>

*/


#include <stdio.h>

#include <iostream>

#include <string>

#include <fstream>

#include <stdlib.h>


using namespace std;


int main()

{

string directory = getenv("HOME"); //get home dirrectory;

string enter;


if(directory == "NULL")

directory = "/home";


while(enter != "quit" && enter != "q")

{

//write comand line

cout << "PARSER@" << directory << "# ";

getline(cin, enter); //waiting for command


//commands

if( enter == "help" || enter == "?")

{

cout << "\tcd <dir>\tchange directory\n";

cout << "\thelp | ?\twiev list of commands\n";

cout << "\tins\t\tinsert new line before <ENTER> string\n";

cout << "\tquit | q\tclose programm\n"; //show list of commands

}

else if( enter == "ins" ) //add spacer before <ENTER>

{

//convert txt file to string

ifstream file("wall.txt", ios::in | ios::binary | ios::ate);

const ifstream::pos_type file_size = file.tellg();

string data(file_size, '\0');

file.seekg(0, ios::beg);

file.read(&data[0], file_size);


//search all <ENTER>'s

size_t position = data.find("<ENTER>");

size_t stringSize = data.size();

while(position < stringSize)

{

string str (data, position-1, 8); //8 characters from pos-1; (pos == <ENTER>, pos-1 == \n<ENTER>)

if(str == "\n<ENTER>")

position += 6; //+6 (not +7) bcs we have pos+1 later in the end of cycle

else

{

data.insert(position, "\n");

}

//find next:

position = data.find("<ENTER>", position+1); //'+1' becouse we must skip '\n' symbol

}


//put all data back in our file

ofstream stream("wall.txt");

stream << data;

stream.close();

}

else if( enter.find("cd ", 0) != string::npos )

{

enter.erase(0, 3); //except "cd "

directory = enter; //change directory

}

// else cout << "Wrong command\n";

}

// getchar();

return 0;

}

 
MyTetra Share v.0.53
Яндекс индекс цитирования