2017-05-28 99 views
0

我很努力地找到一种方法,并且似乎无法在任何地方找到任何解决方案,但我认为它必须是可能的。通过列C++写入文件列

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

这些需要是写入一个逐列对齐的文件,从左到右。例如。 :

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

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

感谢所有帮助

+2

真的很难做到这一点与文字,因为你不知道在哪里把换行,直到你有整行,那时点是没有意义的。我不认为你可以将文件作为行写入列,然后指示用户侧向转动显示器? – user4581301

+5

文件没有列或行的概念。一个文件只是一个字节流。你通常所说的行只是两个'\ n'字符之间的文件的一部分。如果你这样看,你会发现这不能直接完成,因为列会是什么?另一方面,如果您可以定义它(例如通过修复每行和每个单元格的长度),则可以通过预先分配每行来实现。所以这一切都有一件事:“专栏”对你来说意味着什么? – freakish

+2

看起来像一个XY问题,文件真的不知道“列”或“行”是什么。但是这个“当我有两位数的数字”部分有点暗示你可能想尝试二进制文件而不是写文本 – Ap31

回答

2

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

如果您的文本表示有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; 

通常,写入内存比写入文件快得多。另外,您可以使用任何格式(如CSV或XML)输出

+0

谢谢你。我会检查它 – Engineer999

+1

这是类似于我已经做的事情。它仍然不能解决什么时候需要打印两位数字并保持对齐的问题 – Engineer999