При чтении файла (ifstream) есть ли способ направить его на новую строку?

При чтении файла (ifstream) есть ли способ направить его на новую строку?

Например, я хотел бы, чтобы ЭТО произошло:

мой файл>>массив[1]>>массив[2]>>endl;

Очевидно, что «endl» просто не допускается. Есть ли другой способ сделать это?

Редактировать --- спасибо за быстрые ответы, ребята!

Из текстового файла я пытаюсь сохранить две строки из этого файла в массивы, а затем сделать то же самое со следующей строкой (или, пока я не захочу, используя цикл for)

Использование строк важно для меня, так как это сделает мою будущую программу более гибкой.


person Community    schedule 18.12.2008    source источник
comment
Поскольку это невозможно сделать, очевидно, это не то, что вы хотите. Опишите эффекты, которые вы ищете, а не синтаксис.   -  person Greg Rogers    schedule 19.12.2008
comment
Ладно, извини. Из текстового файла я пытаюсь сохранить две строки из этого файла в массивы, а затем сделать то же самое со следующей строкой (или, пока я этого не захочу, используя цикл for). Я надеюсь, что я исхожу как понятно.   -  person    schedule 19.12.2008


Ответы (5)


Несколько вариантов:

Вы можете использовать игнор.

myfile >> array[1] >> array[2];
myfile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

Или вы можете прочитать каждую строку в виде строкового потока

std::string line;
std::getline(myfile,line);
std::stringstream  stream(line);

stream >> array[1] >> array[2];

Обратите внимание: индексация массива начинается с 0.

person Martin York    schedule 19.12.2008

Используйте std::getline, чтобы прочитать строку в поток памяти, а затем получить из нее две строки.

while (cin)
{
  string line;
  getline(cin, line);

  stringstream stream;
  stream << line;

  stream >> array[1]>>array[2];
}
person 1800 INFORMATION    schedule 19.12.2008

Прочтите два ваших сообщения, затем позвоните myfile.ignore(8192, '\n')

person Zan Lynx    schedule 18.12.2008
comment
Большое спасибо, Зан, это именно то, что я искал. Откуда именно взялся 8192? - person ; 19.12.2008
comment
@Винни: 2 х 4096; скорее всего, это максимальное количество символов для чтения, если первой не найдена новая строка. Но учитывая подсказку - есть стандартная функция - можно и RTFM сделать, не так ли? - person Jonathan Leffler; 19.12.2008
comment
Я думаю, что это просто «достаточно большой для строки». - person David Rodríguez - dribeas; 19.12.2008
comment
8192 — это 2*4096, а 4096 — это страница памяти на x86 (она же 4 Кб). - person Max Lybbert; 19.12.2008
comment
@dribeas: подобные предположения однажды таинственным образом сломают ваш код. - person Martin York; 19.12.2008
comment
@yahoo человек: Ну и что. Не уверен, как это относится к строкам. - person Martin York; 19.12.2008
comment
8192 — это просто большое число, которое будет больше строки. Я мог бы использовать max‹int› или что-то еще, но 8192 проще. - person Zan Lynx; 19.12.2008
comment
Так? Действительно ли я хочу прочитать 4 миллиарда байтов, если это двоичный файл без символа '\n'? Нет. В подобных ситуациях я считаю нелепым определять константу для max_expected_characters_in_line. - person Zan Lynx; 21.12.2008

Я понятия не имею, что означает этот вопрос. Вот простой способ прочитать все строки файла в вектор строк. Возможно, вам будет легче делать то, что вы хотите, если вы сначала сделаете это.

std::vector<std::string> lines;

std::string line;
while (std::getline(myFile, line))
    lines.push_back(line);

Теперь вы можете сказать lines[4], чтобы получить пятую строку, или lines.size(), чтобы узнать, сколько строк было.

person Daniel Earwicker    schedule 19.12.2008

Это должно работать:

stringstream stream;
string sLine;
int iLine;

while (cin)
{
  getline(cin, sLine);

  stream << sLine;
  stream >> data[iLine][0] >> data[iLine][1];
}

Индивидуальная версия более раннего ответа.

person Tamara Wijsman    schedule 19.12.2008
comment
К сожалению, это не сработает. Вы продолжаете добавлять каждую строку в поток, не устанавливая ее повторно в пустую. Вы должны объявить поток локально внутри цикла, и он будет работать. - person Martin York; 19.12.2008