fstream — C ++ читает определенные строки из выходного файла

Я делаю программу для класса, которая должна читать определенные строки из выходного файла в зависимости от того, какой «набор данных» выбирает человек. Например, если человек вводит «1» для желаемого набора данных, мне нужно использовать строки с 1 по 8 файла данных (включительно). Если они вводят «2» для нужного набора данных, мне нужно, чтобы программа использовала строки с 9 по 16 из файла данных (включительно), а если «3», то строки с 17 по 24 (включительно).
Вот код, который у меня есть

int main()
{
int latA, latB, latC, latD;
int longA, longB, longC, longD;
int AtoB, BtoC, CtoD, threeFlightTotal, nonStop;
int dataSet;
string cityA, cityB, cityC, cityD;

intro();

cout << "Which data set do you wish to use? 1, 2, or 3?  ";
cin >> dataSet;
while(dataSet < 1 || dataSet > 3)
{
cout << "Sorry, that is not a valid choice. Please choose again." << endl;
cin >> dataSet;
}

ifstream dataIn;
dataIn.open("cities.txt");
if (dataIn.fail())
{
cout << "File does not exist " << endl;
system("pause");
exit(1);
}
else
{
cout << "File opened successfully" << endl;
}

dataIn.close();

system("pause");
return 0;
}

Вот мой файл данных

43.65 79.4
Toronto
40.75 74
New York
33.64 84.43
Atlanta
51.5 0
London
37.78 122.42
San Francisco
47.61 122.33
Seattle
44.88 93.22
Minneapolis
41.88 87.63
Chicago
21.19 157.5
Honolulu
45.31 122.41
Portland
42.2 83.03
Detroit
25.47 80.13
Miami

Как бы я поступил так? Я просмотрел другие посты, но мне трудно понять, как реализовать их решения для моих. Спасибо за любую помощь заранее. Если я не даю достаточно информации, дайте мне знать.

0

Решение

Вы можете просто пропустить ненужные строки:

//here you calculate the amount of lines to skip.
//if dataSet=1 --> linesToSkip=0, if dataSet=2 --> linesToSkip=8...
int linesToSkipt = (dataSet-1) * 8;

//getline Needs a string to load the Content.
//So we don't use the data but wee Need to store it somewhere
std::string helper;

//We use a for Loop to skip the desired amount of lines
for(int i = 0; i < linesToSkip; ++i)
std::getline(dataIn, helper);     //Skip the unneeded lines

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

0

Другие решения

Других решений пока нет …