#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
для позиционирования себя.
С данными, хранящимися в виде текста, это необычно. Обычно вам нужно написать функцию, которая выполняет следующее:
- Откройте файл
- Используйте
std::getline
файл N раз, чтобы перейти к N-й строке из файла. - Запишите строку в a
std::stringstream
. - Используйте
>>
std::stringstream
M раз для чтения столбцов в astd::string
. - Преобразуйте M-й столбец из
std::string
в соответствующий тип данных. - возвращает преобразованный 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;
}
}
//---