如何使用 C++ 写入文件的特定列?

Posted

技术标签:

【中文标题】如何使用 C++ 写入文件的特定列?【英文标题】:How to write into specific columns of a file using C++? 【发布时间】:2011-11-24 19:56:54 【问题描述】:

使用 C++,我想生成一个文件,我必须在其中将行号添加到每行的末尾。有些行在第 13 个字符之后结束,有些在第 32 个字符之后结束。但是行号应该在最后。一行有 80 个字符,行的最后一个数字应该在该行的第 80 列。

有没有办法做到这一点?我使用 ofstream 初始化我的文件,使用 C++。

【问题讨论】:

有几种方法可以做到这一点。这是作业吗? 不,我实际上正在编写一个 IGES 转换器,它需要每行末尾的行号以及特定列中的特定数据。我只是将问题最小化,以便每个人都能理解。 你了解 C++ 吗?你必须特别使用 C++ 吗? 是的,我主要使用 C++ 来解决数值问题。我不熟悉字符串功能。-而且我必须使用 C++,因为我的整个代码都是用 C++ 编写的。 【参考方案1】:

嗯,这是使用字符串流的一种方法:

#include <iostream>
#include <iomanip>
#include <sstream>

using namespace std;

int main() 
    int lineNum = 42;
    stringstream ss;
    ss << setw(80) << lineNum;
    ss.seekp(0);
    ss << "information for beginning of line";
    cout << ss.str() << endl;
    return 0;

基本上将流设置为右对齐并填充为 80 个字符,放置您的行号,然后寻找到您可以输出任何您想要的任何内容的行的开头。当然,如果您继续将一长行数据写入流中,您将覆盖您的行号。

【讨论】:

这正是我所需要的!谢谢【参考方案2】:

填充每个输出行:

#include <sstream>
#include <string>
#include <iostream>

void
pad (std::string &line, unsigned int no, unsigned int len = 80)

  std::ostringstream n;

  n << no;

  line.resize (len - n.str().size (), ' ');
  line += n.str();


int
main ()

  std::string s ("some line");

  pad (s, 42, 80);
  std::cout << s << std::endl;
  return 0;

【讨论】:

以上是关于如何使用 C++ 写入文件的特定列?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C++ 在 .txt 文件中写入、读取和重写

将命令的输出写入 csv 文件的特定列,unix

python 如何将数据写入某个csv文件的特定位置?

PowerShell - 从 csv 文件读取数据,比较特定列中的数据并将结果写入新文件

如何列出 CSV 文件中的各个列?

Wininet & C++:使用 FTP 写入和附加,而不是覆盖,文件