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

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

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

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

Q&A

解決済

1回答

3666閲覧

ダブルクォーテーションが含まれるものと含まれないもののチェック処理

talgiel

総合スコア12

C#

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

0グッド

0クリップ

投稿2020/06/03 10:52

前提・実現したいこと

現在C#の勉強をしております。
CSVファイルの取り込みで分からないことがありますので質問します。

以下CSVファイルがあるとします。(ダブルクォーテーションの有無の違い)
【CSVファイル1】
testName1,testName2,testName3

【CSVファイル2】
"testName1","testName2","testName3"

チェック処理で「CSVファイル2」の内容はOKで「CSVファイル1」の内容はエラーとしたいです。

以下ソースコードでチェックをしたのですが、両方ともチェックOKになってしまいます。
解決方法をご教示いただけたら幸いです。

該当のソースコード

C#

1string[] moto = { "testName1", "testName2", "testName3" }; 2Boolean err = false; 3 4TextFieldParser parser = new TextFieldParser("【CSVファイル】",System.Text.Encoding.GetEncoding("Shift_JIS")); 5parser.TextFieldType = FieldType.Delimited; 6parser.SetDelimiters(","); // 区切り文字はコンマ 7string[] row = parser.ReadFields(); 8for (int i = 0; i < moto.Length; i++) 9{ 10 if (!moto[i].Equals(row[i])) 11 { 12 err = true; 13 } 14} 15 16if (err) 17{ 18 Console.WriteLine("相違してます"); 19} 20else 21{ 22 Console.WriteLine("全て同一です"); 23} 24

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

言語はC#

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

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

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

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

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

pepperleaf

2020/06/03 12:03

同じになるとの事ですが、読み込んだ文字列はどうなっていましたか? デバッガで追うなり、出力するなして確認しましたか?
talgiel

2020/06/03 12:38

出力ではダブルクォーテーションは消えておりました。
guest

回答1

0

ベストアンサー

TextFieldParserはCSV読み込み用なので、「"testName1","testName2","testName3"」が「testName1,testName2,testName3」なっていると思われます。
なので、StreamReaderで読み込み、判定を行えばいいんじゃないでしょうか。

C#

1 string[] moto = { "\"testName1\"", "\"testName2\"", "\"testName3\"" }; 2 Boolean err = false; 3 string[] headers; 4 using (var sr = new StreamReader("test.csv", Encoding.GetEncoding("shift-jis"))) { 5 headers = sr.ReadLine().Split(',').Select(v => v.Trim()).ToArray(); 6 } 7 if (moto.Length != headers.Length) { 8 err = true; 9 } else { 10 for (int i = 0; i < moto.Length; i++) { 11 if (moto[i] != headers[i]) { 12 err = true; 13 break; 14 } 15 } 16 } 17 if (err) { 18 Console.WriteLine("相違してます"); 19 } else { 20 Console.WriteLine("全て同一です"); 21 }

投稿2020/06/03 12:10

Hey_CH

総合スコア437

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

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

talgiel

2020/06/03 12:39

素早い回答ありがとうございます。 回答頂いた方法で試しましたら、上手く判定が出来ました。
Hey_CH

2020/06/03 12:42

了解です。頑張ってください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問