C++中读取文本文本中的内容并进行统计的示例

C++中读取文本文本中的内容并进行统计的示例

程序清单6.16中的程序打开用户指定的文件,读取其中的数字,然后指出文件中包含多少个值以及它们的和与平均值。正确地设计输入循环至关重要,详细请参阅后面的“程序说明”。注意,通过使用了if语句,该程序受益匪浅。

// sumafile.cpp -- functions with an array argument
#include <iostream>
#include <fstream>          // file I/O support
#include <cstdlib>          // support for exit()
const int SIZE = 60;
int main()
{
    using namespace std;
    char filename[SIZE];
    ifstream inFile;        // object for handling file input

    cout << "Enter name of data file: ";
    cin.getline(filename, SIZE);
    inFile.open(filename);  // associate inFile with a file
    if (!inFile.is_open())  // failed to open file
    {
        cout << "Could not open the file " << filename << endl;
        cout << "Program terminating.\n";
        // cin.get();    // keep window open
        exit(EXIT_FAILURE);
    }
    double value;
    double sum = 0.0;
    int count = 0;          // number of items read

    inFile >> value;        // get first value
    while (inFile.good())   // while input good and not at EOF
    {
        ++count;            // one more item read
        sum += value;       // calculate running total
        inFile >> value;    // get next value
    }
    if (inFile.eof())
        cout << "End of file reached.\n";
    else if (inFile.fail())
        cout << "Input terminated by data mismatch.\n";
    else
        cout << "Input terminated for unknown reason.\n";
    if (count == 0)
        cout << "No data processed.\n";
    else
    {
        cout << "Items read: " << count << endl;
        cout << "Sum: " << sum << endl;
        cout << "Average: " << sum / count << endl;
    }
    inFile.close();         // finished with the file
    // cin.get();
    return 0;
}

要运行程序清单6.16中的程序,首先必须创建一个包含数字的文本文件。为此,可以使用文本编辑器(如用于编写源代码的文本编辑器)。假设该文件名为scores.txt,包含的内容如下:
18 19 18.5 13.5 14
16 19.5 2018 12 18.5
17.5
程序还必须能够找到这个文件。通常,除非在输入的文件名中包含路径,否则程序将在可执行文件所属的文件夹中查找。
警告:Windows 文本文件的每行都以回车字符和换行符结尾:通常情况下,C++在读取文件时将这两个字符转换为换行符,并在写入文件时执行相反的转换。有些文本编辑器(如Metrowerks CodeWarrior IDE编辑器 ),不会自动在最后一行末尾加上换行符。因此,如果读者使用的是这种编辑器,请在输入最后的文本后按下回车键,然后再保存文件。
下面是该程序的运行情况:
Enter name of data file:scores.txt
End of file reached.
Items read:12
Sum:204.5
Average:17.0417
程序说明
该程序没有使用硬编码文件名,而是将用户提供的文件名存储到字符数组flename 中,然后将该数组用作 open( )的参数:
inFile.open(filename);
正如本章前面讨论的,检查文件是否被成功打开至关重要。下面是一些可能出问题的地方:指定的文件可能不存在;文件可能位于另一个目录(文件夹)中;访问可能被拒绝;用户可能输错了文件名或省略了文件扩展名。很多初学者花了大量的时间检査文件读取循环的哪里出了问题后,最终却发现问题在于程序没有打开文件。检查文件是否被成功打开可避免将这种将精力放在错误地方的情况发生。

对C++感兴趣的朋友点这里:C/C++课程

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用C/C++进行读取文本文档并提取特定行输出到另一个文本文档可以采用以下步骤: 1. 打开源文本文档和目标文本文档。我们可以使用C/C++的文件处理库函数来完成这一步骤。 2. 创建一个变量,用于存储要提取的特定行数。 3. 使用循环逐行读取文本文档的内容,并将每一行存储到一个临时字符串变量。 4. 判断当前行是否是要提取的特定行,在这里可以使用if语句或其他判断条件。 5. 如果当前行是特定行,则将该行内容写入目标文本文档。 6. 继续循环处理源文本文档的下一行,直到读取完所有行。 7. 关闭源文本文档和目标文本文档。 下面是一个简单的C代码示例,演示了如何实现上述过程: ```c #include <stdio.h> int main() { FILE *sourceFile, *targetFile; char line[100]; int lineNumber = 5; // 假设要提取第5行 // 打开源文本文档 sourceFile = fopen("source.txt", "r"); if (sourceFile == NULL) { printf("无法打开源文本文档。\n"); return 1; } // 打开目标文本文档 targetFile = fopen("target.txt", "w"); if (targetFile == NULL) { printf("无法创建目标文本文档。\n"); return 1; } // 逐行读取文本文档的内容 int currentLine = 1; while (fgets(line, sizeof(line), sourceFile)) { // 判断是否是要提取的特定行 if (currentLine == lineNumber) { // 写入目标文本文档 fputs(line, targetFile); break; // 可根据需求决定是否提取后直接退出循环 } currentLine++; } // 关闭文本文档 fclose(sourceFile); fclose(targetFile); printf("特定行已提取到目标文本文档。\n"); return 0; } ``` 请确保将源文本文档保存为`source.txt`,目标文本文档保存为`target.txt`,并在源文本文档放入一些示例行以进行提取。代码将会提取第5行内容,并将其写入目标文本文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值