2016-10-05 3 views
0

Я новичок в C++ и нуждаюсь в помощи с fstream. Я искал и читал и не могу найти эту информацию.C++ using fstream, чтобы найти конкретные данные

Я хочу получить данные из определенной строки в txt-файле.

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

10 строк и 11 столбцов, каждый столбец либо INT, символ, строка и т.д.

Есть в любом случае я могу получить одну переменную из конкретные строки и столбцы, без использования массива?

Ex: если я хочу, чтобы получить переменные из строки 9 и колонки 4.

Спасибо заранее!

+2

Пропустить 8 «катится», а затем пропустить 3 колонки, а затем прочитать одну вещь? – immibis

+1

То, о чем вы спрашиваете, в основном: «Как я могу перейти к определенному месту в файле?» Вы не можете ничего, что кто-либо может предложить, например, что предлагает immibis и уже предоставленный ответ, - это прочитать файл пока вы не находитесь в той части, которую хотите, затем запишите нужную вам часть, затем закройте файл. Вы не можете просто прыгать к месту в файле, не зная, где он находится. – searchengine27

ответ

2

Если вы точно знаете, как долго каждая строка и где каждый столбец находится в каждой строке, вы можете точно вычислить, куда вы хотите пойти, и use seekgto position yourself.

С данными, хранящимися в виде текста, это необычно. Обычно вы должны написать функцию, которая выполняет следующие действия:

  1. Открыть файл
  2. Используйте std::getline на файл N раз, чтобы добраться до N-й строки из файла.
  3. Напишите строку в std::stringstream.
  4. Используйте >> на std::stringstream М раз, чтобы читать столбцы в std::string.
  5. Преобразование M-й колонны от std::string к соответствующему типу данных.
  6. возвращение преобразован Mth column.
0
//------------------------------- 
//--This code maybe can help you 
//------------------------------- 
#include <iostream> 
#include <fstream> 
#include <string> 
#include <sstream> 

int main() 
{ 

    char lBuffer[100]; 
    //--- 
    std::string myfilename = "/var/log/mylog.log"; 
    std::ifstream log_file (myfilename); 
    std::stringstream my_ss; 
    std::string c1, c2, c3; 
    //--- 
    std::cout << "Rec1\t\t Rec2\t\t Rec3" << std::endl; 
    while (! log_file.eof()) 
    { 
      log_file.getline(lBuffer,80); 
      my_ss << lBuffer; 

      my_ss >> c1; 
      my_ss >> c2; 
      my_ss >> c3; 

      std::cout << c1 << "\t\t " << c2 << "\t\t " << c3 << std::endl; 

    } 

} 
//--- 
Смежные вопросы