C , использующий fstream для поиска определенных данных

#c #fstream #ifstream #ofstream

#c #fstream #ifstream #ofstream

Вопрос:

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

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

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

10 строк и 11 столбцов, каждый столбец является либо int, char, string и т.д.

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

Пример: если я хочу получить переменную из строки 9 и столбца 4.

Заранее спасибо!

Комментарии:

1. Пропустить 8 «рулонов», а затем пропустить 3 столбца, а затем прочитать что-то одно?

2. То, что вы спрашиваете, лежит в его основе: how do I jump to a particular spot in file? Вы не можете сделать ничего, что кто-либо предлагает, например, что предлагают immibis и уже предоставленный ответ, — это прочитать файл, пока вы не дойдете до нужной части, затем запишите нужную часть, а затем закройте файл. Вы не можете просто перейти к месту в файле, не зная, где оно находится.

Ответ №1:

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

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

  1. Откройте файл
  2. Используйте std::getline файл N раз, чтобы перейти к N-й строке из файла.
  3. Запишите строку в a std::stringstream .
  4. Используйте >> std::stringstream M раз для чтения столбцов в a std::string .
  5. Преобразуйте M-й столбец из std::string в соответствующий тип данных.
  6. возвращает преобразованный M-й столбец.

Ответ №2:

 //-------------------------------
//--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 << "Rec1tt Rec2tt 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 << "tt " << c2 << "tt "   << c3 << std::endl;

    }

}
//---