🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

7937閲覧

String型からDatetime型への変換(ParseExact)

ihsyo-y

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2019/12/04 14:46

編集2019/12/04 14:52

①csvデータをStreamReaderで1行読込み、配列に格納したのち、(ex data_f[0] = "aa,bb,cc,dd,ee")
②それをsplitでカンマ区切りで分割し配列に格納しました。(ex data_s[0]=aa,data_s[1]=bb,...)

string[] f_Header = data_f[0].Split(',');

③そのデータ(ex data[0])を以下のようにDateTime型に変換したところ

DateTime data_Time = DateTime.ParseExact(f_Header[0],"yyyy/mm/dd hh:mm:ss",null);

以下の例外が発生してしまいました。

型 'System.FormatException' のハンドルされていない例外が mscorlib.dll で発生しました 追加情報:String was not recognized as a valid DateTime.

尚、f_Header[0],"の中身は"""2018/06/28 17:10:44"""となっており、バックスラッシュが混入しています。
①~③の手順にどこに問題があるのでしょうか。

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

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

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

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

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

YAmaGNZ

2019/12/04 14:53

エラーとなるデータとエラーの発生するコードを具体的に提示してください。
guest

回答2

0

ベストアンサー

想像ですが・・・

改行コードやカンマがフィールド値の中にある場合、フィールド値をダブルクォート (") で囲むと言った約束を設けて対応しますが、元の CSV ファイルがそのようになっている(フィールドをダブルクォートで囲ってある)ということはないですか?

そういう場合は、質問者さんがやっているような、String.Split メソッドで文字列を区切るといった単純な手段は手は使えないです。

もしそうなら、既存の CSV パーサーを使ってはいかがですか。(そのような CSV ファイルの処置が可能なパーサーを自力で作るのはそう簡単ではないので)

詳しくは以下の記事を見てください。

CSV形式のファイルをDataTableや配列等として取得する
http://dobon.net/vb/dotnet/file/readcsvfile.html

その中で紹介されている TextFieldParser が個人的には使いやすそうだと思います。Visual Basic .NET 用のクラスライブラリですが、C# でも Microsoft.VisualBasic.dll を参照に追加してやれば使えます。何といっても Microsoft のライブラリなので、これを使うのが一番簡単かつ無難そうな気がします。

投稿2019/12/05 01:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ihsyo-y

2019/12/14 04:47

>改行コードやカンマがフィールド値の中にある場合、フィールド値をダブルクォート (") で囲むと言>った約束を設けて対応しますが、元の CSV ファイルがそのようになっている(フィールドをダブル>クォートで囲ってある)ということはないですか? 元データファイルを確認したところ、ご指摘の通り取得文字列がダブルクォートで囲まれていました。 今回はダブルクォートつきのデータをsubstringで切り出し、対応しました。 ありがとうございました。
guest

0

バックスラッシュが混入しています。

と、例外の原因がわかってるなら、これを削除するようにコードを組めばいいのでは。

①~③の手順にどこに問題があるのでしょうか。

バックスラッシュ及び余計な文字を削除する手順を省略しているところに問題があります

投稿2019/12/04 17:56

y_waiwai

総合スコア88040

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

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

YAmaGNZ

2019/12/04 22:14

もしかして、バックスラッシュじゃなくてダブルコーテーションで囲まれているだけなのでは?とは思いましたね。 だからデータを出してくれって言ったんですが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問