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

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

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

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

Q&A

解決済

1回答

431閲覧

読み込んだCSVファイルの内容をコンソール上に表示する際に、区切り文字を削除して表示させたいです。

don

総合スコア10

C++

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

0グッド

0クリップ

投稿2022/06/14 14:49

編集2022/06/15 05:11

コードの内容

九九の表をCSVファイルに書き込んだ後、
書き込んだCSVファイルから読み込んでコンソール上に表示するコードを書きました。
書き込み時には、CSVファイル内でA列にデータが集約されることを避けるために、カンマを区切り文字として書き込んでいます。

やりたいこと

カンマ区切りで書き込まれているCSVファイルのデータを、読み込み時にはカンマを削除した状態でコンソール画面に表示させたいです。

試したこと:

正規表現のregex_replaceを使おうと試みましたが、第一引数の文字列を指定する箇所に”九九の表の表示”を指定するやり方がわからず、上手くできていません。

以下がコードになります。

C++

1#include <iostream> 2#include <fstream> 3#include <sys/stat.h> 4#include <string> 5#include <sstream> 6using namespace std; 7 8void displayKukuTable( ofstream &outputFile, char arrFileName[], char chConmaPresOrAbs ) 9{ 10 outputFile << " --  9×9の表  -- \n\n"; 11 12 for( int p = 1; p <= 9; p++ ) { 13 for( int q = 1; q <= 9; q++ ) { 14 outputFile.width( 3 ); 15 outputFile << p * q << chConmaPresOrAbs; 16 } 17 outputFile << "\n"; 18 } 19} 20 21int outputCSVFile( char arrFileName[], char chConmaPresOrAbs ) // csvファイルに9×9の表を書き込む関数 22{ 23 ofstream outputFile( arrFileName ); 24 25 if( !outputFile ){ 26 cout << "ファイルが開けませんでした。" << endl; 27 return 0; 28 } 29 else { 30 cout << "ファイルを開けました。" << endl; 31 32 displayKukuTable( outputFile, arrFileName, chConmaPresOrAbs ); 33 34 outputFile << "\n"; 35 outputFile.close(); 36 return 1; 37 } 38 outputFile << "\n"; 39 outputFile.close(); 40} 41 42int readCSVFile( char arrFilePathName[]) // csvファイルを読み込んでコンソール上に表示する関数 43{ 44 ifstream inputSourceFile; 45 if( !inputSourceFile ){ 46 cout << "ファイルを開けませんでした。" << endl; 47 return 0; 48 } 49 else{ 50 cout << "ファイルを開けました。" << endl; 51 52 inputSourceFile.open( arrFilePathName ); 53 string strInputDestination; 54 while( getline( inputSourceFile, strInputDestination ) ){ 55 cout << strInputDestination << endl; 56 } 57 return 1; 58 } 59}

下記が、CSVファイル内の内容です。
--  9×9の表  --

1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81

**下記が、コンソール画面での表示内容です。
--  9×9の表  --

1, 2, 3, 4, 5, 6, 7, 8, 9,
2, 4, 6, 8, 10, 12, 14, 16, 18,
3, 6, 9, 12, 15, 18, 21, 24, 27,
4, 8, 12, 16, 20, 24, 28, 32, 36,
5, 10, 15, 20, 25, 30, 35, 40, 45,
6, 12, 18, 24, 30, 36, 42, 48, 54,
7, 14, 21, 28, 35, 42, 49, 56, 63,
8, 16, 24, 32, 40, 48, 56, 64, 72,
9, 18, 27, 36, 45, 54, 63, 72, 81,
↑のカンマ(,)を削除したいと考えております。

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

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

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

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

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

y_waiwai

2022/06/14 22:32

どういうCSVファイルをなんでしょうか。 そして、それがどういう出力になるのかを提示しましょう また、その出力がどういうふうになればいいのかも提示してください
don

2022/06/14 23:40

ご指摘ありがとうございます。 質問内容を修正いたしましたので、ご検討いただけますと幸いです。 よろしくお願いいたします。
itagagaki

2022/06/15 03:29

自分で chConmaPresOrAbs を指定しているのでは??
fana

2022/06/15 04:01 編集

文字列内を1文字ずつ走査し,各文字が「区切り文字」か否かを判定し,「区切り文字」でない文字のみを出力すればよいでのはないでしょうか. 上記は,誰だって思いつく話と思えますが,これを行わない理由は何なのでしょうか? これでは何か問題があるのでしょうか? 仮に「そういう自明なことをやりたいわけではないのだ」という話なのであれば,「じゃあ何をしたいのか?」という要件を述べるべきでしょう.
don

2022/06/15 05:19

書き込みの際に挿入しているカンマを最初から挿入しなければいいのは理解しているのですが、それではCSVファイル内での表示が崩れてしまいます。 ・CSVファイルを書き込む際には区切り文字を挿入して表示 ・CSVファイルを読み込む際には書き込み時に挿入したカンマを削除して表示 という2つの処理を、自分のコードの中で両立させた処理を行いたい、というのが質問の意図になります。 質問内容がわかりずらくて申し訳ありません。 書いたコードの経緯なども出来るだけ説明したうえで質問することを心がけます。
fana

2022/06/15 06:50

うん,だから表示の際に cout << strInputDestination << endl; とか横着してないで, この文字列 strInputDestination の内容を1文字ずつチェックしながらcoutに突っ込んでいけば良いんじゃないんですか? っていう話なんだけど,その点どうなんです?
don

2022/06/15 14:16

なるほど! strInputDestination[i]として、1要素目からカンマかどうかを判定してカンマならregex_replaceでスペースに置き換えるというコードにして無事カンマ削除して表示できました。 ありがとうございました。
fana

2022/06/16 01:00 編集

原始的に for( char c : strInputDestination )std::cout << (c!=',' ? c : ' '); で良いのでは.
kazuma-s

2022/06/16 05:19

質問のコードに main を追加して、コンパイルと実行ができるようにしてください。
guest

回答1

0

ベストアンサー

これじゃダメですか?

import pandas as pd df = pd.read_csv('csvファイル名.csv') print(df)

投稿2022/06/15 23:29

icemanstanding

総合スコア73

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

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

fana

2022/06/16 01:04

低評価の理由: どう見ても質問者の現C++コードを出発点としている話に対して 全く無関係な話を持ち込んでみせたところで役に立つとは思えません.
icemanstanding

2022/06/16 01:06

ありゃ本当ですね、正しいコメントだと思います。 よく読むべきでした反省します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問