2017-05-28 5 views
0

私はこれを行う方法を見つけるのに苦労していますが、どこでも解決策を見つけることはできませんが、可能でなければならないと思います。ファイルを列ごとに書き込むC++

私は行ごとにではなく、列ごとにファイルに書きたいと思います。私のプログラムが実行されているときに更新される文字列の配列があります。文字列は "--4 ---"、 "1 -----"、 "--15 ---"、 "---- 6-"などのようになります。

左から右へ列ごとに整列されたファイルに書き込まれます。例えば。 :

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

私はofstreamを使用しています。私は、特定の数の文字列が更新されるまで待つことができますし、行ごとにファイルに印刷しますが、2桁の数字がある場合は乱雑になります。オフセットを修正する必要があります。任意のヘルプ

+2

行全体を持ち、次にポイントが何か問題になるまで、行送りをどこに置くべきか分からないので、テキストでこれを行うのは本当に難しいです。私はあなたが行として列を持つファイルを書くことができますし、横にモニターを回すようにユーザーを指示しないと思いますか? – user4581301

+5

ファイルには、列または行の概念はありません。ファイルは単なるバイトストリームです。あなたが通常行と呼ぶものは、2つの '\ n'文字間のファイルの一部です。あなたがそれを見たら、これは直接行えないことがわかります。列は何であろうか?一方、(たとえば各行と各セルの長さを固定するなどして)定義できる場合は、事前に各行を事前に割り当てることで可能になります。それで、すべてが一つのことになります。「コラム」はあなたにとって何を意味していますか? – freakish

+2

はXYの問題のようですが、ファイルは実際には「列」または「行」が何であるかわかりません。しかし、この "私は2桁の数字があるとき"は、テキストを書くのではなくバイナリファイルを試してみたいというヒントです。 – 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

これは私がすでにやっていたものに似ています。それはまだ私は2桁を印刷し、整列を維持する必要があるときの問題を解決しません – Engineer999