C++でファイルの読み込み、書き込み、出力幅の変更

実現したいこと

クラスを作り、目的通りの結果を出力すること。
また人数が増えたときに対応できるプログラムの作成

|NO |氏名 |フリガナ |登校日 |
|407 |山田 太郎 |ヤマダ タロウ | 2021/04/01|
|408 |山田 次郎 |ヤマダ ジロウ |2021/04/01|
|409 |山田 三郎 |ヤマダ サブロウ |2021/04/01|
|410 |山田 五右衛門 | ヤマダ ゴエモン |2021/04/01|

前提

c++でcsvファイルから読み込みcmdに出力するのですが、わかりません。
クラスにして、ナンバーならナンバーに格納、名前なら名前に格納まではわかりました。
そのあとのことについて質問です。
csvなのでカンマ区切りなのですが、カンマを区切った後、「|」に変更するプログラムを書きたいです。先頭にもつける必要があります。

また、完成したものを次は改造し、ここに載っていない名前の書き込み出力も行います。(いまはこのプログラムの完成が先ですが...)
先頭にもつける必要があります。

また、初心者なため解説していただけるとさらに理解が深まります。お手数をおかけしますが宜しくお願い致します。

該当のソースコード

c++

1#include <fstream>2#include <iostream>3#include <iomanip>4#include <cstring>5#include <sstream>6#include <string>7using namespace std;8 9 10class StaffInfo 11{12public:13 string NO;14 string NAME;15 string KANA;16 string FWORK;17 18 void setno(string NO);19 void setname(string NAME);20 void setkana(string KANA);21 void setfwork(string FWORK);22};23 24void StaffInfo::setno(string NO) {25 26}27 28int main(int argc, char *argv[]) {29 30 if (argc != 2) {31 cout << "パラメータ数が違います。" << endl;32 return 1;33 }34 ifstream fin(argv[1]);35 if (!fin) {36 cout << "ファイルをオープンできませんでした。" << endl;37 return 1;38 }39 40 int i;41 for (i = 0; !fin.eof(); i++) {42 string strline;43 if (getline(fin, strline)) {44 std::stringstream ss(strline);45 std::string s;46 while (getline(ss, s, 's')) {47 cout << "s" << s << endl;48 }49 }50 }51 /* 52 char ch; 53 fin.get(ch); 54 55 while (!fin.eof()) { 56 setw(3); 57 cout.put(ch ==',' ? '|':ch); 58 fin.get(ch); 59 } 60 */61 62 fin.close();63 64 return 0;65 66}

試したこと

参考書の読み直し
先ほど教えていただいたところをコメントにしてはいますがset()を使いましたがうまく動きませんでした。
class StaffInfo を使うよう言われたので訂正するためにコメントにしました。

先ほどのやつの改訂版です。
名前が漢字 四文字の方もいれば違う方いらっしゃるのでそれに対応したい。
「|」はずれないように縦に1直線にしたいので、出力幅を名前の最大に対応できる関数が必要だと私は考える。

コメントを投稿

0 コメント