【问题标题】:Writing to a file column by column C++逐列 C++ 写入文件
【发布时间】:2017-05-28 07:02:01
【问题描述】:

我正在努力寻找解决方法,似乎无法在任何地方找到任何解决方案,但我想它必须是可能的。

我想逐列而不是逐行写入文件。我有一个字符串数组,在我的程序运行时会更新。字符串看起来像这样“--4---”、“1-----”、“--15---”、“----6-”等。

这些需要从左到右逐列写入文件。例如。 :

--1-------
----------
4----15---
----------
-------6--
----------

我正在使用 ofstream。我可以等到一定数量的字符串被更新,然后将它们逐行打印到文件中,但是当我有两位数字时它会变得混乱,因为必须提前更正偏移量(每个数组索引必须对齐)等.

感谢您的帮助

【问题讨论】:

  • 用文本真的很难做到这一点,因为在你有整行之前你不知道在哪里放置换行符,然后这一点就没有实际意义了。我不认为您可以将列作为行写入文件,然后指示用户将显示器侧向转动?
  • 文件没有列或行的概念。文件只是一个字节流。您通常所说的行只是两个\n 字符之间的文件的一部分。如果你这样看,你会发现这不能直接完成,因为列是什么?另一方面,如果您可以定义它(例如通过固定每行和每个单元格的长度),那么可以通过预先分配每一行来实现。所以这一切都归结为一件事:“列”对您意味着什么?
  • 似乎是一个 XY 问题,文件真的不知道“列”或“行”是什么。但是这个“当我有两位数的数字”部分暗示你可能想尝试二进制文件而不是写文本
  • 如果你不知道有多少行会提前出现问题,因为你不知道要留下多少空间。一种解决方案是将每一列写入它自己的文件。或者只是将行写入文件,然后编写输入代码以从该文件中获取列。基本上没有办法正确创建所需的文件,直到你知道会有多少行。
  • 你一开始就知道有多少列和行,到最后会有多少?

标签: c++ file ofstream


【解决方案1】:

更好的方法是在内存中对文件进行建模,然后将内存写入文件。

如果您的文本表示有 5 列,我建议使用 6 列的矩阵并让第 6 列成为换行符。

#define MAX_ROWS 4
#define MAX_COLUMNS (5+1)

char board[MAX_ROWS][MAX_COLUMNS];

// Initialize the board
for (size_t row = 0; row < MAX_ROWS; ++row)
{
  for (size_t column = 0; column < MAX_COLUMNS - 1; ++column)
  {
    board[row][column] = '-';
  }
  board[row][column] = '\n';
}
board[MAX_ROWS-1][MAX_COLUMNS-1] = '\0'; // Add terminating NULL.

然后您可以通过以下方式打印板:

cout << (char *)(&board[0][0]) << endl;

通常,写入内存比写入文件要快得多。此外,您可以以任何格式输出 board,例如 CSV 或 XML。

【讨论】:

  • 谢谢。我去看看
  • 这与我已经在做的类似。它仍然不能解决我何时需要打印 2 位数字并保持对齐的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
相关资源
最近更新 更多