質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

689閲覧

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

shiba_1006

総合スコア3

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2023/04/18 07:33

編集2023/04/18 18:07

実現したいこと

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

|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直線にしたいので、出力幅を名前の最大に対応できる関数が必要だと私は考える。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2023/04/18 07:38 編集

えっと...そもそも出力時のフォントは等幅フォントになっているのか? 見た目で | が揃ってほしいなら、等幅フォント使わにゃならんのだが。
shiba_1006

2023/04/18 07:38

等幅になるよう訂正します
int32_t

2023/04/18 07:42 編集

StaffInfo クラスを使うのが要件なのでしょうか。 もしそうなら、出力のことを考えるのは時期尚早で、StaffInfo を生成してCSVから読み込んだ項目をセットするのが今実装することでは。
shiba_1006

2023/04/18 07:43

>>見た目で | が揃ってほしいなら、等幅フォント使わにゃならんのだが。 見た目でそろってほしいです
episteme

2023/04/18 07:44

だからなに? 等幅フォントで出力するだけのことでしょ?
shiba_1006

2023/04/18 07:53

StaffInfo クラスを使うのが要件です。 その実装もわからなく困っています。
guest

回答1

0

ベストアンサー

  • std::vector<StaffInfo> などのコレクションを用意しておく
  • 1行読む毎に StaffInfo のインスタンスを生成する
  • 1行を分解して StaffInfo::set〜 を呼んで項目をセットする
  • その StaffInfo インスタンスを上記コレクションに格納する

ここまでできたら出力のことを考えましょう。

投稿2023/04/18 09:07

int32_t

総合スコア20659

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問