如何从文件中的特定行读取?

时间:2015-01-05 23:45:41

标签: c++

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    int k = 0;
    int n;
    int y[0];
    cout << "write n\n";
    cin >> n;
    ifstream infile;
    infile.open("xxx.in.txt");
    infile >> y[0];
    infile.close();
    for(int x = 0; x < n; x++)
        for(int j = 1; j < n; j++)
            if(y[x] > y[j])
                k = k++;
    ofstream outfile;
    outfile.open("xxx.out.txt");
    outfile << k;
    outfile.close();
}

文件xxx.in包含两行(它是文本文件)。

第一行有n个数字,第二行有间隔的随机数。

我想从第二行开始阅读。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

有几种方法可以从文本文件的第二行获取输入。

  1. 如果您知道第一行有多长,可以使用istream::seekg

     ifstream infile;
     infile.open("xxx.in.txt");
     infile.seekg(length_of_first_line); // This would move the cursor to the second line.
     // Code to read line 2.
    
  2. 如果您不知道该值或它可能会改变。然后你需要使用istream::getline并丢弃第一行。

     char buffer[256];
     ifstream infile;
     infile.open("xxx.in.txt");
     infile.getline(buffer, 256); // Read in the first line.
     // Code to read line 2.
    

答案 1 :(得分:0)

从文本文件输入:

使用<vector><fstream><sstream>,您可以使用以下函数中的内容:

using namespace std;    

vector<vector<int> > getNumbers(string FileName) {
    vector<vector<int> > Numbers;            //Stores all the file's numbers
    ifstream infile(FileName.c_str());       
    string String;                           
    int a;
    while (getline(infile, String)) {        
        vector<int> Line;                    //Stores each line's numbers
        stringstream Stream(String);         
        while (Stream >> a)                  //Extracts numbers from 'Stream'
            Line.push_back(a);               //Each number is added to Line
        Numbers.push_back(Line);             //Each Line is added to Numbers
    }
    return Numbers;
}

它返回一个ints的二维向量,其中getFileNumber[x][y] x值是行号(从第1行的值0开始),{{1 value是行上数字的位置(第一个数字为0)。

例如,在包含以下内容的文件中

y

464 654334 35665 3456332 4454 2456 788654 3456 5775 号码为3456

输出到另一个文本文件:

要将getFileNumbers[1][2]向量的全部内容复制到文本文件,您可以这样做:

getFileNumbers

行特定输出:

如果您想使用std::vector<std::vector<int> > Numbers = getFileNumbers("xxx.in.txt"); std::ofstream Output("xxx.out.txt"); for (unsigned int y = 0; y < Numbers.size(); ++y) { for (unsigned int x = 0; x < Numbers[y].size(); ++x) Output << Numbers[y][x] << ' '; Output << '\n'; } 输出文件的行x,请执行以下操作:

std::cout

如果您想将行std::vector<std::vector<int> > Numbers = getFileNumbers("xxx.in.txt"); for (unsigned int i = 0; i < Numbers[x].size(); ++i) std::cout << Numbers[x][i] << ' '; 输出到文件,只需将x替换为std::coutstd::ofstream对象。