2014-01-25 5 views
0

Я новичок I C++, поэтому я действительно не знаю, существует ли такая функция, как поиск. Я хочу функцию, которая анализирует файл, чтобы найти строку, начинающуюся с точной строки, и вернуть ее.C++: файл синтаксического анализа, чтобы найти точную строку

Например, если у меня есть файл вроде этого:

test 4645 
foo erf rfr 564 
bar I like train 
sponge bob 

Я хотел бы сделать что-то вроде

std::string line = Func("/my/path/file", "bar"); 
std::cout << line << std::endl; // display bar I like train 
+0

Вы должны создать этот код самостоятельно, как ничто точно подобное уже существует. Начните с чтения файла строки за строкой (возможно, используйте std :: getline?). Возьмите каждую строку поочередно и посмотрите, есть ли начало строки == bar (доступны различные доступные функции сравнения, такие как _wcsicmp, будучи осторожными, когда строка коротка или длина 0), наконец, верните оставшуюся часть строки (substr). – niemiro

+0

Вы можете прочитать каждую строку в строке 'string' и использовать' substr() ', чтобы проверить, содержит ли' 'bar" 'или нет. – herohuyongtao

ответ

0

Функция не существует, но все строительные блоки готовы в стандартной библиотеке C++. Что-то вроде

std::string Func(const std::string& file, const std::string& prefix) 
{ 
    std::ifstream input(file); 
    std::string line; 
    while (std::getline(input, line)) 
     if (line.find(prefix) == 0) 
      return line; 
    return ""; 
} 
-2

вы должны прочитать файл построчно в попытку найти конкретное слово в линия попробовать этот

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

string find_in_line (const string& fileName, const string& searchWord) 
{ 
string STRING; 
ifstream infile; 
infile.open (fileName); 

while(!infile.eof()) // To get you all the lines. 
{ 
    getline(infile,STRING); // Saves the line in STRING. 
    if (STRING.find(searchWord) != std::string::npos){   
    { 
     // YOU GOT THE LINE CONTAINING "bar" 
     infile.close();    
     return STRING; 
    } 

} 
infile.close(); 
} 

я думаю, что это должно работать ...

+0

Также проверьте входной поток для 'fail()' - если что-то пойдет не так, вы даже не достигнете EOF. –

+0

Общая проверка ошибок для EOF, но не для действительного ввода. –

+0

Это не полный код для поиска, это подход к тому, что нужно делать. –

0

Синтаксический поток для префикса в каждой строке:

#include <iostream> 
#include <sstream> 

int main() { 
    std::istringstream in(
     "test 4645\n" 
     "foo erf rfr 564\n" 
     "bar I like train\n" 
     "sponge bob\n"); 

    std::string prefix = "bar"; 

    std::string line; 
    while(std::getline(in, line)) { 
     if(line.compare(0, prefix.size(), prefix) == 0) { 
      std::cout << "Result: " << line << '\n'; 
      return 0; 
     } 
    } 
    std::cout << "No result\n"; 
    return -1; 
} 
Смежные вопросы