DOBON.NETプログラミング道掲示板
(現在 過去ログ2 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33794 / inTopicNo.1)  CSVのTextFieldParser読込時のオリジナル1行データの取得について
  
□投稿者/ aki 一般人(1回)-(2018/01/26(Fri) 10:49:53)
  • アイコン環境/言語:[Windows 7 64bit / .NET Framework 4.6] 
    分類:[.NET] 

    CSVの読込を行い、カンマ等で区切ってフィールドを取得する関数を作っています。

    public static IEnumerable<string[]> getContext(
    string path, string separator = ",", Encoding encoding = null) {
    using (Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)) {
    using (TextFieldParser parser = new TextFieldParser(stream, encoding ?? Encoding.UTF8, true, false)) {

    parser.ReadLine();//最初の2行はヘッダーとしてスキップ
    parser.ReadLine();//最初の2行はヘッダーとしてスキップ

    parser.TextFieldType = FieldType.Delimited;
    parser.Delimiters = new[] { separator };
    parser.HasFieldsEnclosedInQuotes = true;
    parser.TrimWhiteSpace = true;
    while (!parser.EndOfData) {
    string[] fields = parser.ReadFields();
    yield return fields;
    }
    }
    }
    }


    この処理において、オリジナルの1行分のデータも合わせて取得したいと考えています。
    (できれば、string配列の最後に追加したい…)

    111,222,あああ,いいい
     ↓
    配列[0] = 111
    配列[1] = 222
    配列[2] = あああ
    配列[3] = いいい
    配列[4] = 111,222,あああ,いいい

    ですが、どのようにすればいいのか検討がつきません。

    もし教えていただけると大変助かります。
    どうぞ宜しくお願い致します。
引用返信 削除キー/
■33795 / inTopicNo.2)  Re[1]: CSVのTextFieldParser読込時のオリジナル1行データの取得について
□投稿者/ ぼーちゃん 一般人(1回)-(2018/01/26(Fri) 11:34:12)
  • アイコン
    yield returnの直前に以下を追加でどうでしょう
    
    string original = String.Join(",", fields);  //1行分の文字列取得
    fields.CopyTo(fields = new string[fields.Length + 1], 0);  //配列の要素数を増やす
    fields[fields.Length - 1] = original;

引用返信 削除キー/
■33796 / inTopicNo.3)  Re[2]: CSVのTextFieldParser読込時のオリジナル1行データの取得について
□投稿者/ aki 一般人(2回)-(2018/01/26(Fri) 12:22:14)
  • アイコンぼーちゃんさん

    素早いご返信ありがとうございます。

    ご提示いただいた方法で試してみますね!

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


解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -