C++中文件的读取操作,如何读取多行数据,如何一个一个的读取数据

http://blog.csdn.net/sunhero2010/article/details/50980591

练习8.1:编写函数。接受一个istream&参数,返回值类型也是istream&。此函数必须从给定流中读取数据,直至遇到文件结束标识时停止。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <stdexcept>
  3. using std::istream;
  4. using std::cin;
  5. using std::cout;
  6. using std::cerr;
  7. using std::endl;
  8. using std::runtime_error;
  9. istream &f(istream &in)
  10. {
  11. int v;
  12. while(in >> v, !in.eof())
  13. {
  14. if(in.bad())
  15. throw runtime_error("IO Stream error.");
  16. if(in.fail())
  17. {
  18. cerr<<"Data error! Please try again."<<endl;
  19. in.clear();
  20. in.ignore(100, ‘\n‘);
  21. continue;
  22. }
  23. cout<< v <<endl;
  24. }
  25. in.clear();
  26. return in;
  27. }
  28. int main()
  29. {
  30. cout<<"Please input some numbers, enter Ctrl+Z to end"<<endl;
  31. f(cin);
  32. return 0;
  33. }

练习8.3:什么情况下,下面的while循环会终止?

while (cin >> i) /*. . .*/

遇到文件结束符,或者遇到了IO流错误或者读入了无效数据。

练习8.4:编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个独立的元素存于vector中。

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <vector>
    using std::cout;
    using std::endl;
    using std::string;
    using std::ifstream;
    using std::cerr;
    using std::vector;  

    int main()
    {
        ifstream in("data.txt");
        if(!in) {
            cerr<<"Can‘t open the file."<<endl;
            return -1;
        }  

        string line;
        vector<string> words;
        while(getline(in, line))
            words.push_back(line);  

        in.close();  

        vector<string>::const_iterator it = words.cbegin();
        while (it != words.cend())
        {
            cout<< *it <<endl;
            ++it;
        }
        return 0;
    }

练习8.5:重写上面的程序,将每个单词作为一个独立的元素进行存储。

[cpp] view plain copy

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <vector>
    using std::cout;
    using std::endl;
    using std::string;
    using std::ifstream;
    using std::cerr;
    using std::vector;  

    int main()
    {
        ifstream in("data.txt");
        if(!in) {
            cerr<<"Can‘t open the file."<<endl;
            return -1;
        }  

        string line;
        vector<string> words;
        while(in >> line)
            words.push_back(line);  

        in.close();  

        vector<string>::const_iterator it = words.cbegin();
        while (it != words.cend())
        {
            cout<< *it <<endl;
            ++it;
        }
        return 0;
    }

练习8.6:重写7.1.1节的书店程序,从一个文件中读取交易记录。将文件名作为一个参数传递给main。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <fstream>
  3. #include "Sales_data.h"
  4. using std::cout;
  5. using std::cerr;
  6. using std::ifstream;
  7. using std::endl;
  8. int main(int argc, char *argv[])
  9. {
  10. if (argc != 2) {
  11. cerr<< "Please give the file name."<<endl;
  12. return -1;
  13. }
  14. ifstream in(argv[1]);
  15. if (!in) {
  16. cerr<<"Can‘t open the file."<<endl;
  17. return -1;
  18. }
  19. Sales_data total;
  20. if (read(in, total)) {
  21. Sales_data trans;
  22. while(read(in ,trans)) {
  23. if(total.isbn() == trans.isbn())
  24. total.combine(trans);
  25. else {
  26. print(cout, total) << endl;
  27. total =trans;
  28. }
  29. }
  30. print(cout, total)<<endl;
  31. }
  32. else {
  33. cerr<<" No data?!"<<endl;
  34. }
  35. return 0;
  36. }

练习8.7:修改上一节的书店程序,将结果保存到一个文件中。将输出文件名作为第二个参数传递给main函数。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <fstream>
  3. #include "Sales_data.h"
  4. using std::cerr;
  5. using std::ifstream;
  6. using std::ofstream;
  7. using std::endl;
  8. int main(int argc, char *argv[])
  9. {
  10. if (argc != 3) {
  11. cerr<< "Please give the input file name and out file name."<<endl;
  12. return -1;
  13. }
  14. ifstream in(argv[1]);
  15. if (!in) {
  16. cerr<<"Can‘t open the file."<<endl;
  17. return -1;
  18. }
  19. ofstream out(argv[2]);
  20. if (!out) {
  21. cerr<<"can‘t open output file."<<endl;
  22. return -1;
  23. }
  24. Sales_data total;
  25. if (read(in, total)) {
  26. Sales_data trans;
  27. while(read(in ,trans)) {
  28. if(total.isbn() == trans.isbn())
  29. total.combine(trans);
  30. else {
  31. print(out, total) << endl;
  32. total =trans;
  33. }
  34. }
  35. print(out, total)<<endl;
  36. }
  37. else {
  38. cerr<<" No data?!"<<endl;
  39. }
  40. return 0;
  41. }

练习8.8:修改上一题的程序,将结果追加到给定的文件末尾。对同一个输出文件,运行程序至少两次,检验数据是否得以保留。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <fstream>
  3. #include "Sales_data.h"
  4. using std::cerr;
  5. using std::ifstream;
  6. using std::ofstream;
  7. using std::endl;
  8. int main(int argc, char *argv[])
  9. {
  10. if (argc != 3) {
  11. cerr<< "Please give the input file name and out file name."<<endl;
  12. return -1;
  13. }
  14. ifstream in(argv[1]);
  15. if (!in) {
  16. cerr<<"Can‘t open the file."<<endl;
  17. return -1;
  18. }
  19. ofstream out(argv[2], ofstream::app);
  20. if (!out) {
  21. cerr<<"can‘t open output file."<<endl;
  22. return -1;
  23. }
  24. Sales_data total;
  25. if (read(in, total)) {
  26. Sales_data trans;
  27. while(read(in ,trans)) {
  28. if(total.isbn() == trans.isbn())
  29. total.combine(trans);
  30. else {
  31. print(out, total) << endl;
  32. total =trans;
  33. }
  34. }
  35. print(out, total)<<endl;
  36. }
  37. else {
  38. cerr<<" No data?!"<<endl;
  39. }
  40. return 0;
  41. }

练习8.3.1:使用你为8.1.2节第一个练习所编写的函数打印一个istringstream对象的内容。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <sstream>
  3. #include <string>
  4. #include <stdexcept>
  5. using std::istream;
  6. using std::ostringstream;
  7. using std::istringstream;
  8. using std::string;
  9. using std::cout;
  10. using std::cerr;
  11. using std::endl;
  12. using std::runtime_error;
  13. istream &f(istream &in)
  14. {
  15. int v;
  16. while(in >> v, !in.eof())
  17. {
  18. if(in.bad())
  19. throw runtime_error("IO Stream error.");
  20. if(in.fail())
  21. {
  22. cerr<<"Data error! Please try again."<<endl;
  23. in.clear();
  24. in.ignore(100, ‘\n‘);
  25. continue;
  26. }
  27. cout<< v <<endl;
  28. }
  29. in.clear();
  30. return in;
  31. }
  32. int main()
  33. {
  34. ostringstream msg;
  35. msg<<"C++ Primer 5th edition"<<endl;
  36. istringstream in(msg.str());
  37. f(in);
  38. return 0;
  39. }

练习8.10:编写程序,将来自一个文件中的行保存在一个vector<string>中。然后使用一个istringstream从vector读取数据元素,每次读取一个单词。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <string>
  5. #include <vector>
  6. using std::cerr;
  7. using std::endl;
  8. using std::cout;
  9. using std::ifstream;
  10. using std::istringstream;
  11. using std::string;
  12. using std::vector;
  13. int main()
  14. {
  15. ifstream in("Data.txt");
  16. if (!in) {
  17. cerr<<" Can‘t open input file."<<endl;
  18. return -1;
  19. }
  20. string line;
  21. vector<string> words;
  22. while (getline(in, line)) {
  23. words.push_back(line);
  24. }
  25. in.close();
  26. vector<string>::const_iterator it = words.begin();
  27. while( it != words.end()) {
  28. istringstream line_str(*it);
  29. string word;
  30. while(line_str >> word)
  31. cout<< endl;
  32. ++it;
  33. }
  34. return 0;
  35. }

练习8.11:本节的程序在外层while循环中定义了istringstream对象。如果record对象定义在循环之外,你需要对程序进行怎么样的修改?重写程序,将record的定义移到while循环之外,验证你设想的修改方法是否正确。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <sstream>
  3. #include <string>
  4. #include <vector>
  5. using std::cin;
  6. using std::istringstream;
  7. using std::string;
  8. using std::vector;
  9. struct PersonInfo {
  10. string name;
  11. vector<string> phones;
  12. };
  13. int main()
  14. {
  15. string line, word;
  16. vector<PersonInfo> people;
  17. istringstream record;
  18. while (getline(cin,line)) {
  19. PersonInfo info;
  20. record.clear();
  21. record.str(line);
  22. record >> info.name;
  23. while (record >> word)
  24. info.phones.push_back(word);
  25. people.push_back(info);
  26. }
  27. return 0;
  28. }

练习8.12:我们为什么没有在PersonInfo中使用类内初始化?

由于每个人的电话号数量不固定,因此更好的方式不是通过类内初始化指定人名和所有电话号码,而是在缺省初始化之后,在程序中设置人名并逐个添加电话号码。

练习8.13:重写本节的电话号码程序,从一个命名文件而非cin读取数据。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <string>
  5. #include <vector>
  6. using std::cerr;
  7. using std::endl;
  8. using std::cout;
  9. using std::ifstream;
  10. using std::istringstream;
  11. using std::ostringstream;
  12. using std::string;
  13. using std::vector;
  14. struct PersonInfo {
  15. string name;
  16. vector<string> phones;
  17. };
  18. string format(const string &s) { return s; }
  19. bool valid(const string &s)
  20. {
  21. return true;
  22. }
  23. int main(int argc, char *argv[])
  24. {
  25. string line, word;
  26. vector<PersonInfo> people;
  27. istringstream record;
  28. if (argc != 2) {
  29. cerr<<"Please give the file name."<<endl;
  30. return -1;
  31. }
  32. ifstream in(argv[1]);
  33. if(!in)
  34. {
  35. cerr<<"can‘t open input file"<<endl;
  36. return -1;
  37. }
  38. while (getline(in, line)) {
  39. PersonInfo info;
  40. record.clear();
  41. record.str(line);
  42. record >> info.name;
  43. while(record >> word)
  44. info.phones.push_back(word);
  45. people.push_back(info);
  46. }
  47. ostringstream os;
  48. for (const auto &entry : people) {
  49. ostringstream formatted, badNums;
  50. for(const auto &nums : entry.phones) {
  51. if (!valid(nums)) {
  52. badNums << " "<< nums;
  53. }
  54. else
  55. formatted << " " <<format(nums);
  56. }
  57. if (badNums.str().empty())
  58. os <<entry.name<<" "<<formatted.str()<<endl;
  59. else
  60. cerr<<"input error: "<<entry.name<<" invalid number(s) "<<badNums.str()<<endl;
  61. }
  62. cout<<os.str()<<endl;
  63. return 0;
  64. }

练习8.14:我们为什么将entry和nums定义为const auto&?

这两条语句分别适用范围for语句枚举people中所有项和每项的phones中的所有项。使用const表明在循环中不会改变这些项的值;auto是请求编译器依据vector元素类型来推断出entry和nums的类型,既简化代码又避免出错;使用引用的原因是,people和phones的元素分别是结构对象和字符串对象,使用引用即可避免对象拷贝。

版权声明:本文为博主原创文章,未经博主允许不得转载。

2
0

练习8.1:编写函数。接受一个istream&参数,返回值类型也是istream&。此函数必须从给定流中读取数据,直至遇到文件结束标识时停止。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <stdexcept>
  3. using std::istream;
  4. using std::cin;
  5. using std::cout;
  6. using std::cerr;
  7. using std::endl;
  8. using std::runtime_error;
  9. istream &f(istream &in)
  10. {
  11. int v;
  12. while(in >> v, !in.eof())
  13. {
  14. if(in.bad())
  15. throw runtime_error("IO Stream error.");
  16. if(in.fail())
  17. {
  18. cerr<<"Data error! Please try again."<<endl;
  19. in.clear();
  20. in.ignore(100, ‘\n‘);
  21. continue;
  22. }
  23. cout<< v <<endl;
  24. }
  25. in.clear();
  26. return in;
  27. }
  28. int main()
  29. {
  30. cout<<"Please input some numbers, enter Ctrl+Z to end"<<endl;
  31. f(cin);
  32. return 0;
  33. }

练习8.3:什么情况下,下面的while循环会终止?

while (cin >> i) /*. . .*/

遇到文件结束符,或者遇到了IO流错误或者读入了无效数据。

练习8.4:编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个独立的元素存于vector中。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <vector>
  5. using std::cout;
  6. using std::endl;
  7. using std::string;
  8. using std::ifstream;
  9. using std::cerr;
  10. using std::vector;
  11. int main()
  12. {
  13. ifstream in("data.txt");
  14. if(!in) {
  15. cerr<<"Can‘t open the file."<<endl;
  16. return -1;
  17. }
  18. string line;
  19. vector<string> words;
  20. while(getline(in, line))
  21. words.push_back(line);
  22. in.close();
  23. vector<string>::const_iterator it = words.cbegin();
  24. while (it != words.cend())
  25. {
  26. cout<< *it <<endl;
  27. ++it;
  28. }
  29. return 0;
  30. }

练习8.5:重写上面的程序,将每个单词作为一个独立的元素进行存储。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <vector>
  5. using std::cout;
  6. using std::endl;
  7. using std::string;
  8. using std::ifstream;
  9. using std::cerr;
  10. using std::vector;
  11. int main()
  12. {
  13. ifstream in("data.txt");
  14. if(!in) {
  15. cerr<<"Can‘t open the file."<<endl;
  16. return -1;
  17. }
  18. string line;
  19. vector<string> words;
  20. while(in >> line)
  21. words.push_back(line);
  22. in.close();
  23. vector<string>::const_iterator it = words.cbegin();
  24. while (it != words.cend())
  25. {
  26. cout<< *it <<endl;
  27. ++it;
  28. }
  29. return 0;
  30. }

练习8.6:重写7.1.1节的书店程序,从一个文件中读取交易记录。将文件名作为一个参数传递给main。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <fstream>
  3. #include "Sales_data.h"
  4. using std::cout;
  5. using std::cerr;
  6. using std::ifstream;
  7. using std::endl;
  8. int main(int argc, char *argv[])
  9. {
  10. if (argc != 2) {
  11. cerr<< "Please give the file name."<<endl;
  12. return -1;
  13. }
  14. ifstream in(argv[1]);
  15. if (!in) {
  16. cerr<<"Can‘t open the file."<<endl;
  17. return -1;
  18. }
  19. Sales_data total;
  20. if (read(in, total)) {
  21. Sales_data trans;
  22. while(read(in ,trans)) {
  23. if(total.isbn() == trans.isbn())
  24. total.combine(trans);
  25. else {
  26. print(cout, total) << endl;
  27. total =trans;
  28. }
  29. }
  30. print(cout, total)<<endl;
  31. }
  32. else {
  33. cerr<<" No data?!"<<endl;
  34. }
  35. return 0;
  36. }

练习8.7:修改上一节的书店程序,将结果保存到一个文件中。将输出文件名作为第二个参数传递给main函数。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <fstream>
  3. #include "Sales_data.h"
  4. using std::cerr;
  5. using std::ifstream;
  6. using std::ofstream;
  7. using std::endl;
  8. int main(int argc, char *argv[])
  9. {
  10. if (argc != 3) {
  11. cerr<< "Please give the input file name and out file name."<<endl;
  12. return -1;
  13. }
  14. ifstream in(argv[1]);
  15. if (!in) {
  16. cerr<<"Can‘t open the file."<<endl;
  17. return -1;
  18. }
  19. ofstream out(argv[2]);
  20. if (!out) {
  21. cerr<<"can‘t open output file."<<endl;
  22. return -1;
  23. }
  24. Sales_data total;
  25. if (read(in, total)) {
  26. Sales_data trans;
  27. while(read(in ,trans)) {
  28. if(total.isbn() == trans.isbn())
  29. total.combine(trans);
  30. else {
  31. print(out, total) << endl;
  32. total =trans;
  33. }
  34. }
  35. print(out, total)<<endl;
  36. }
  37. else {
  38. cerr<<" No data?!"<<endl;
  39. }
  40. return 0;
  41. }

练习8.8:修改上一题的程序,将结果追加到给定的文件末尾。对同一个输出文件,运行程序至少两次,检验数据是否得以保留。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <fstream>
  3. #include "Sales_data.h"
  4. using std::cerr;
  5. using std::ifstream;
  6. using std::ofstream;
  7. using std::endl;
  8. int main(int argc, char *argv[])
  9. {
  10. if (argc != 3) {
  11. cerr<< "Please give the input file name and out file name."<<endl;
  12. return -1;
  13. }
  14. ifstream in(argv[1]);
  15. if (!in) {
  16. cerr<<"Can‘t open the file."<<endl;
  17. return -1;
  18. }
  19. ofstream out(argv[2], ofstream::app);
  20. if (!out) {
  21. cerr<<"can‘t open output file."<<endl;
  22. return -1;
  23. }
  24. Sales_data total;
  25. if (read(in, total)) {
  26. Sales_data trans;
  27. while(read(in ,trans)) {
  28. if(total.isbn() == trans.isbn())
  29. total.combine(trans);
  30. else {
  31. print(out, total) << endl;
  32. total =trans;
  33. }
  34. }
  35. print(out, total)<<endl;
  36. }
  37. else {
  38. cerr<<" No data?!"<<endl;
  39. }
  40. return 0;
  41. }

练习8.3.1:使用你为8.1.2节第一个练习所编写的函数打印一个istringstream对象的内容。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <sstream>
  3. #include <string>
  4. #include <stdexcept>
  5. using std::istream;
  6. using std::ostringstream;
  7. using std::istringstream;
  8. using std::string;
  9. using std::cout;
  10. using std::cerr;
  11. using std::endl;
  12. using std::runtime_error;
  13. istream &f(istream &in)
  14. {
  15. int v;
  16. while(in >> v, !in.eof())
  17. {
  18. if(in.bad())
  19. throw runtime_error("IO Stream error.");
  20. if(in.fail())
  21. {
  22. cerr<<"Data error! Please try again."<<endl;
  23. in.clear();
  24. in.ignore(100, ‘\n‘);
  25. continue;
  26. }
  27. cout<< v <<endl;
  28. }
  29. in.clear();
  30. return in;
  31. }
  32. int main()
  33. {
  34. ostringstream msg;
  35. msg<<"C++ Primer 5th edition"<<endl;
  36. istringstream in(msg.str());
  37. f(in);
  38. return 0;
  39. }

练习8.10:编写程序,将来自一个文件中的行保存在一个vector<string>中。然后使用一个istringstream从vector读取数据元素,每次读取一个单词。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <string>
  5. #include <vector>
  6. using std::cerr;
  7. using std::endl;
  8. using std::cout;
  9. using std::ifstream;
  10. using std::istringstream;
  11. using std::string;
  12. using std::vector;
  13. int main()
  14. {
  15. ifstream in("Data.txt");
  16. if (!in) {
  17. cerr<<" Can‘t open input file."<<endl;
  18. return -1;
  19. }
  20. string line;
  21. vector<string> words;
  22. while (getline(in, line)) {
  23. words.push_back(line);
  24. }
  25. in.close();
  26. vector<string>::const_iterator it = words.begin();
  27. while( it != words.end()) {
  28. istringstream line_str(*it);
  29. string word;
  30. while(line_str >> word)
  31. cout<< endl;
  32. ++it;
  33. }
  34. return 0;
  35. }

练习8.11:本节的程序在外层while循环中定义了istringstream对象。如果record对象定义在循环之外,你需要对程序进行怎么样的修改?重写程序,将record的定义移到while循环之外,验证你设想的修改方法是否正确。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <sstream>
  3. #include <string>
  4. #include <vector>
  5. using std::cin;
  6. using std::istringstream;
  7. using std::string;
  8. using std::vector;
  9. struct PersonInfo {
  10. string name;
  11. vector<string> phones;
  12. };
  13. int main()
  14. {
  15. string line, word;
  16. vector<PersonInfo> people;
  17. istringstream record;
  18. while (getline(cin,line)) {
  19. PersonInfo info;
  20. record.clear();
  21. record.str(line);
  22. record >> info.name;
  23. while (record >> word)
  24. info.phones.push_back(word);
  25. people.push_back(info);
  26. }
  27. return 0;
  28. }

练习8.12:我们为什么没有在PersonInfo中使用类内初始化?

由于每个人的电话号数量不固定,因此更好的方式不是通过类内初始化指定人名和所有电话号码,而是在缺省初始化之后,在程序中设置人名并逐个添加电话号码。

练习8.13:重写本节的电话号码程序,从一个命名文件而非cin读取数据。

[cpp] view plain copy

  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <string>
  5. #include <vector>
  6. using std::cerr;
  7. using std::endl;
  8. using std::cout;
  9. using std::ifstream;
  10. using std::istringstream;
  11. using std::ostringstream;
  12. using std::string;
  13. using std::vector;
  14. struct PersonInfo {
  15. string name;
  16. vector<string> phones;
  17. };
  18. string format(const string &s) { return s; }
  19. bool valid(const string &s)
  20. {
  21. return true;
  22. }
  23. int main(int argc, char *argv[])
  24. {
  25. string line, word;
  26. vector<PersonInfo> people;
  27. istringstream record;
  28. if (argc != 2) {
  29. cerr<<"Please give the file name."<<endl;
  30. return -1;
  31. }
  32. ifstream in(argv[1]);
  33. if(!in)
  34. {
  35. cerr<<"can‘t open input file"<<endl;
  36. return -1;
  37. }
  38. while (getline(in, line)) {
  39. PersonInfo info;
  40. record.clear();
  41. record.str(line);
  42. record >> info.name;
  43. while(record >> word)
  44. info.phones.push_back(word);
  45. people.push_back(info);
  46. }
  47. ostringstream os;
  48. for (const auto &entry : people) {
  49. ostringstream formatted, badNums;
  50. for(const auto &nums : entry.phones) {
  51. if (!valid(nums)) {
  52. badNums << " "<< nums;
  53. }
  54. else
  55. formatted << " " <<format(nums);
  56. }
  57. if (badNums.str().empty())
  58. os <<entry.name<<" "<<formatted.str()<<endl;
  59. else
  60. cerr<<"input error: "<<entry.name<<" invalid number(s) "<<badNums.str()<<endl;
  61. }
  62. cout<<os.str()<<endl;
  63. return 0;
  64. }

练习8.14:我们为什么将entry和nums定义为const auto&?

这两条语句分别适用范围for语句枚举people中所有项和每项的phones中的所有项。使用const表明在循环中不会改变这些项的值;auto是请求编译器依据vector元素类型来推断出entry和nums的类型,既简化代码又避免出错;使用引用的原因是,people和phones的元素分别是结构对象和字符串对象,使用引用即可避免对象拷贝。

版权声明:本文为博主原创文章,未经博主允许不得转载。

2
0

时间: 2024-10-08 02:46:05

C++中文件的读取操作,如何读取多行数据,如何一个一个的读取数据的相关文章

(六)kernel中文件的读写操作可以使用vfs_read()和vfs_write

需要在Linux kernel--大多是在需要调试的驱动程序--中读写文件数据.在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有: filp_open() filp_close(), vfs_read() vfs_write(),set_fs(),get_fs()等,这些函数在linux/fs.h和asm/uaccess.h头文件中声明.下面介绍主要步骤 1. 打开文件 filp_open()在kernel中可以打开文件,其原形如下: strcut file

linux中文件I/O操作(系统I/O)

我们都知道linux下所有设备都是以文件存在的,所以当我们需要用到这些设备的时候,首先就需要打开它们,下面我们来详细了解一下文件I/O操作. 用到的文件I/O有以下几个操作:打开文件.读文件.写文件.关闭文件等,对应用到的函数有:open.read.write.close.lseek(文件指针偏移) 文件描述符:对于内核而言,所有打开的文件都通过文件按描述符引用.文件描述符是一个非负整数.                      当打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描

Python中文件的读写操作的几种方法

对文件的操作,步骤为:打开一个文件-->读取/写入内容-->保存文件 文件读写的3中模式 # 1.w 写模式,它是不能读的,如果用w模式打开一个已经存在的文件,会清空以前的文件内容,重新写# w+ 是读写内容,只要沾上w,肯定会清空原来的文件# 2.r 读模式,只能读,不能写,而且文件必须存在# r+ 是读写模式,只要沾上r,文件必须存在# 3.a 追加模式,也能写,在文件的末尾添加内容# 4.rb+.wb+.ab+,这种是二进制模式打开或者读取,一些音乐文件 test1.txt 如果无情的风

Go语言学习之os包中文件相关的操作(The way to go)

生命不止,继续 go go go !!! 今天跟大家分享学习的是os package,主要是介绍一些跟文件或文件夹相关的操作. os包 Package os provides a platform-independent interface to operating system functionality. The design is Unix-like, although the error handling is Go-like; failing calls return values o

java中文件的I/O操作

java中文件的读写操作 (一) (1)java中文件的字节转成字符读操作 FileInputStream fStream = new FileInputStream("test.txt");//此时为字节流 byte[] b = new byte[31];//定义字节数组存储从文件夹中读取的数据,大小最多31字节 fStream.read(b);//将test.txt的数据读到b中 String line = new String(b,"UTF-8");//将字节

Android 手持PDA读取SD卡中文件

近两年市场上很多Wince设备都开始转向Android操作系统,最近被迫使用Android开发PDA手持设备.主要功能是扫描登录,拣货,包装,发货几个功能.其中涉及到商品档的时候大概有700左右商品要导入到Android设备中,因为现场操作环境没有WiFi ,所以商品档不能直接访问服务,将商品档记录到txt文件中. 一. 将txt文件存放到SD开中 将商品档编辑成为txt文件然后拷贝到SD卡中,当然也可以存储其他的数据格式,甚至可以使用Sqlite来存储,这里没有这个必要所以就直接使用txt 二

优化shell的文件读取操作

前段时间经常在linux下对文件进行一些读取操作,可在操作得过程中发觉一些脚本的执行效率并不是很理想,下来认真的翻了一下<Mastering UNIX shell Scripting>,学习了一下其中对文件读取和写入得一些方法,在此进行总结记录. 我们对文件得处理往往是通过循环得方式进行的,在循环中解析文件时,需要一种方法把整行得数据读入到一个变量中.最常见的命令是read.该命令很灵活,可用它读取单个字符串也可以读取整行.谈到读取整行,line是另一个可以读一行得命令.但一些操作系统并不支持

Objective-C OC中文件读取类(NSFileHandle)介绍和常用使用方法

转自http://www.it165.net/pro/html/201402/9100.html NSFileHandle NSFileManager类主要对于文件的操作(删除,修改,移动,赋值等等) NSFileHandle类主要对文件的内容进行读取和写入操作 NSFileHandle处理文件的步骤 1:创建一个NSFileHandle对象 2:对打开的文件进行I/O操作 3:关闭文件对象操作 常用处理方法 view sourceprint? 01.+ (id)fileHandleForRea

python pandas 中文件的读写——read_csv()读取文件

read_csv()读取文件1.python读取文件的几种方式read_csv 从文件,url,文件型对象中加载带分隔符的数据.默认分隔符为逗号read_table 从文件,url,文件型对象中加载带分隔符的数据.默认分隔符为制表符(“\t”)read_fwf 读取定宽列格式数据(也就是没有分隔符)read_cliboard 读取剪切板中的数据,可以看做read_table的剪切板.在将网页转换为表格时很有用2.读取文件的简单实现程序代码: df=pd.read_csv('D:/project/

使用java读取文件夹中文件的行数

使用java统计某文件夹下所有文件的行数 经理突然交代一个任务:要求统计某个文件夹下所有文件的行数.在网上查了一个多小时没有解决.后来心里不爽就决定自己写一个java类用来统计文件的行数,于是花了两个小时将代码写出(可见我的java功底还是挺烂的).虽然有很多有待改进的地方,依然有纪念意义. 本java类的核心是通过BufferedReader类的readLine()方法,间接的统计行数:通过递归遍历文件. 这个类只是写来完成任务的.结果不是很严谨,许多情况并没考虑到:比如判断想读取某一类文件怎