C++を勉強しています。
csvファイルを読み込むことはできるのですが、カンマを|に変えて、出力幅を同じにするやり方がわかりません。手助けお願いします。
いろいろなことを試しましたが、文字化けしたりうまくcmdで表示されませんでした。
出力したい結果は以下です。
|NO |氏名 |フリガナ |登校日 |
|407 |山田 太郎|ヤマダ タロウ |2021/04/01|
|408 |山田 次郎 |ヤマダ ジロウ |2021/04/01|
|409 |山田 三郎 |ヤマダ サブロウ |2021/04/01|
|410 |山田 四郎| ヤマダ シロウ |2021/04/01|
#include <fstream>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[]) {
if (argc != 2) { cout << "パラメータ数が違います。" << endl; return 1; } ifstream fin(argv[1]); if (!fin) { cout << "ファイルをオープンできませんでした。" << endl; return 1; } char ch; fin.get(ch); while (!fin.eof()) { cout.put(ch); fin.get(ch); } fin.close(); return 0;
}
> いろいろなことを試しましたが
呈示されたコードに"いろいろなことを試しました”が見あたりません。
iint i;
for(i = 0;!fin.eof(); i++) {
string strline;
if(getline(fin strline)) {
std::stringstream ss(strline);
std::string s;
while(getline(ss, s, 's')){
cout << "s" << end;
}
}
}
このように1行ずつで試してみてもダメでした。そのあとがわからなくなります。
> 出力幅を同じにする
の意味がわかりません.詳述できないのでしょうか?
> 出力したい結果は以下です
と示されている物を見ても,一体何が「同じ幅」になっているのかさっぱりわかりません.
出力幅を同じにしたいのは|の部分です。一直線にしたいのです。わかりにくくすみません。
たとえば「各列の開始位置が全ての行で揃った形の出力になるように,各要素の末尾に適切にスペースを補わねばならない」だとか,具体的に説明すると良いのでは.(「一直線」にするために,何をすべきなのか? というところまで.)
なるほど、ありがとうございます
"|" の位置を全行で揃えるためには,少なくとも「全行の内容を知る」必要がある(1文字読んでは即出力するような処理では無理)と思う.
なので,まずはとりあえず「入力を全て読んでデータとして保持する」→「その後,その保持データ全てを表示する」みたいな形をやってみることから始めてはどうか?
それで後段の「保持データ全てを表示する」の部分をいろいろと工夫してみるための土台ができるのでは.
class StaffInfo
{
public:
string NO;
string NAME;
string KANA;
string FWORK;
void setno(string NO);
void setname(string NAME);
void setkana(string KANA);
void setfwork(string FWORK);
};
voidの一番上から、NOを保存名前を保存というように関数を作ったのですが、そのあとの処理に困っています。コードが思いつきません...
……というわけで,
「まずはCSVファイルの内容を全て読む → 何やかんや頑張って表示してみる」っていう処理フローな回答を書いてみた.
何か参考にでもなれば.
(…とか言ってたら,既に別の質問立ててこっちは放棄されててワラタ)
すみません、説明不足等があったものですから、新しいものを書いたほうが良いと思いました。
回答いただきありがとうございます。
参考にさせていただきます。
回答2件
あなたの回答
tips
プレビュー