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

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

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C++

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

3452閲覧

CSVファイルを読み込み,2重配列に格納

00_x9925

総合スコア12

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C++

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/05/09 13:14

前提・実現したいこと

「各月の平均気温をCSVファイル形式で出力するプログラムを作成」という課題についてです

年月日 最高気温(℃) 最低気温(℃)
2018/1/1 10.5 0.3
2018/1/2 10.6 0.9
2018/1/3 6.8 -2.6
2018/1/4 8 -3.8
2018/1/5 4.4 -1.2
2018/1/6 8.8 -0.1
2018/1/7 9 -1.7
2018/1/8 8.5 0
2018/1/9 10.3 0.4



という内容のCSVファイル(365日まである)を読み取り,これらの要素を2次元配列に格納して,さらにそれを基に各月の平均気温を新しいCSVファイル形式で出力. という問題です.

該当のソースコード

C++言語です

<ソースコード>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define BUFFSIZE 1024
#define DAYS 365
#define NUMDATA 2

int main(void)
{
FILE* fp;
char s[BUFFSIZE];
errno_t error;
error = fopen_s(&fp, ".csv", "r");
if (error != 0)
fprintf_s(stderr, "failed to open");
else {
while (fgets(s, BUFFSIZE, fp) != NULL) {
fprintf_s(stdout, "%s", s);
}
fclose(fp);
}
error = fopen_s(&fp, "testOut.txt", "w");
if (error != 0)
fprintf_s(stderr, "failed to open");
else {
fputs("hogehoge\n", fp);
fputs("foofoo\n", fp);
fputs("barbar\n", fp);
fclose(fp);
}
}

試したこと

はずかしながら,ファイルを読み込んで,簡単な文字列をテキストファイルに出力する,という試作的なことしかできていません.

補足情報(FW/ツールのバージョンなど)

開発環境はvisual studio2019です

CVSファイルを読み込
み配列に格納する関数を作成するとよい,と書かれていました
//void CSV2Array(const char *fieeame, doubie data[DAYS][eUMDATA]);
//• 2次元配列日数×最低・最高気温 doubie data[365][2];
//• 文字列から浮動小数点数に変換する関数 doubie tmp = atof(“1.25”);

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

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

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

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

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

episteme

2020/05/09 14:31

で、質問はなんですか?
00_x9925

2020/05/09 14:37

失礼しました CSVファイルを2次元配列に格納する具体的な方法とは何か,というのが質問です.
guest

回答1

0

ベストアンサー

CSVファイルを2次元配列に格納する具体的な方法とは何か,というのが質問です.

これ↓でいい?

C++

1#include <iostream> 2#include <fstream> 3#include <string> 4#include <iomanip> 5 6#define DAYS 365 7#define NUMDATA 2 8 9int CSV2Array(const char* filename, double data[DAYS][NUMDATA]) { 10 using namespace std; 11 ifstream stream(filename); 12 string date; 13 double high, low; 14 int index = 0; 15 getline(stream, date); // 先頭行を空読み 16 while ( stream >> date >> high >> low ) { 17 data[index][0] = high; 18 data[index][1] = low; 19 ++index; 20 } 21 return index; 22} 23 24int main() { 25 using namespace std; 26 double data[DAYS][NUMDATA]; 27 int n = CSV2Array("temp.csv", data); 28 29 for ( int i = 0; i < n; ++i ) { 30 cout << "high:" << setw(6) << data[i][0] 31 << " low:" << setw(6) << data[i][1] << endl; 32 } 33}

temp.csv:

年月日 最高気温(℃) 最低気温(℃) 2018/1/1 10.5 0.3 2018/1/2 10.6 0.9 2018/1/3 6.8 -2.6 2018/1/4 8 -3.8 2018/1/5 4.4 -1.2 2018/1/6 8.8 -0.1 2018/1/7 9 -1.7 2018/1/8 8.5 0 2018/1/9 10.3 0.4

実行結果:

high: 10.5 low: 0.3 high: 10.6 low: 0.9 high: 6.8 low: -2.6 high: 8 low: -3.8 high: 4.4 low: -1.2 high: 8.8 low: -0.1 high: 9 low: -1.7 high: 8.5 low: 0 high: 10.3 low: 0.4

投稿2020/05/09 14:59

episteme

総合スコア16612

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

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

00_x9925

2020/05/09 17:08

ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問