csvファイルの読み込み – プログラミング – Home

通知
すべてクリア

csvファイルの読み込み

固定ページ 1 / 2

タナ
 タナ
(@タナ)
ゲスト
結合: 21年前
投稿: 5
Topic starter  

最近プログラミングを始めたのですが、
参考書を読んでも、CSVファイルの読み込み方がわかりません。
参考書が悪いだけかなあ。

1列目に時間、2列目にデータがあるのですが、
別々に読み込んで、処理するにはどうすればいいのでしょうか?

また、私が読み込みしたやり方だとchar型なので、データの操作ができないです。
double型として扱うにはどうすればいいでしょうか?

よろしくオネガイシマス。


引用解決済
トピックタグ
moto
 moto
(@moto)
ゲスト
結合: 21年前
投稿: 3
 

こんにちは、motoといいます。私もC言語少し勉強した程度なので
適切なアドバイスにならないと思いますが、分かる範囲でレスします。

読み込んだchar型を整数なら「ans = atoi('文字列');」、倍精度等(float・double)なら
「ans = atof('文字列');」でいいと思いますが、コンパイラによっては文法や
関数名が違いますので、コンパイラのドキュメントやC言語の本で確認して下さい。


返信引用
Kazuki
 Kazuki
(@Kazuki)
ゲスト
結合: 22年前
投稿: 41
 

char *csv = 12.1,3.14;
double a, b;
scanf(%lf,%lf, &a, &b);


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

えーと、CVSってテキストファイルですよね。
ですから、各行を文字列で読み込むようにして
カンマを使って行内のデータを分割し、
文字列を数値に変換する関数を使って数値にします。

scanfをつかっている例を挙げておられる方がいますが、
scanfはエラー処理が甘いので関数一発で済ませようとしないで
ちゃんと分解して数値化するロジックを組んでみておいた方が
後々役に立つと思います。

scanfの問題点はあちこちの掲示板でも指摘されていると思うので
ここでは特に指摘しません。
御自分で調べてみてください。


返信引用
たく
 たく
(@たく)
ゲスト
結合: 23年前
投稿: 37
 

茶々

> えーと、CVSってテキストファイルですよね。
バージョン管理システムです。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

もひとつ茶々。

> char *csv = 12.1,3.14;
> double a, b;
> scanf(%lf,%lf, &a, &b);
csvから読みとってないやん。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

がーん。

CSVファイルとCVSを間違えとった。
恥ずかしいー。(--;


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

ちなみに打ち間違いですから。
タ・イ・プ・ミ・ス。(^^;


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

余計なお世話ですが、読み込む項目のなかに ',' や '' が含まれていると、
CSVの正しい読み込みは途端に厄介になります。ご参考まで。


返信引用
あお
 あお
(@あお)
ゲスト
結合: 21年前
投稿: 45
 

fopenとfgetsで一行づつ読み込んで
,ごとにやりたい処理をするのが一番ではないかと思います。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

先日、',' や '' ありのCSVについて悩んだのですが、
CSVの規格というものはあるのでしょうか?
読込の部分の自作をやめて、下記のクラスを使ったのですが、
そこの作者も知らないとの事でした。

この掲示板でも話題になったことがあったような気がしたのですが、
見つけられませんでした。ご存知のかた、いらっしゃいましたら、
お願いいたします。

http://www.wakhok.ac.jp/~tomoharu/Java/csv/


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

CSVの仕様には'揺れ'があるみたいです。
たとえば項目中に改行を許すか。許すならその形式は? とか。


返信引用
monkey
 monkey
(@monkey)
ゲスト
結合: 21年前
投稿: 70
 

情報提供:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t12.htm
CSVの標準規格ってないんでしょうか.


返信引用
こじま
 こじま
(@こじま)
ゲスト
結合: 22年前
投稿: 19
 

まあ、普通のCSVなら、boost::tokenizerでいいと思う。
"で囲んだやつと、\でのエスケープを有効にするなら、こんな感じか。

#include <iostream>
#include <algorithm>
#include <boost/tokenizer.hpp>

char str[256];
std::cin.getline(str, sizeof(str))
boost::tokenizer< boost::escaped_list_separator<char> >
csvTokens(str, boost::escaped_list_separator<char>() );
std::copy(csvTokens.begin(), csvTokens.end(), std::ostream_iterator<char>
(std::cout));


返信引用
RiSK
 RiSK
(@RiSK)
ゲスト
結合: 21年前
投稿: 21
 

> CSVの規格というものはあるのでしょうか?

規格かどうかは分かりませんが、情報を。

The Programmer's File Format Collection
http://www.wotsit.org/

ここで CSV を検索すれば…


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました