teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

訂正

2017/06/03 01:09

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -4,4 +4,24 @@
4
4
  .Select(path => ...)
5
5
  .Select(fields => string.Format("〒{0} {1}{2}{3}", fields[2], fields[6], fields[7], fields[8])));
6
6
 
7
- fieldsはString[]ですが、元のコードではfieldsに対してパイプライン処理(Select)を施しているのでfieldはStringになります。そのためfield[2]とかやると「文字列の3番目の文字」という意味になってしまいます。
7
+ fieldsはString[]ですが、元のコードではfieldsに対してパイプライン処理(Select)を施しているのでfieldはStringになります。そのためfield[2]とかやると「文字列の3番目の文字」という意味になってしまいます。
8
+
9
+ ---
10
+
11
+ 訂正1:Contextの戻り値の型を勘違いしてました。ContextがIEnumerable<String[]>ならば以下のようにSelectManyを使うと素直に書けると思います。
12
+
13
+ ...
14
+ .SelectMany(path => CSVFiled.Context(path.FullName, ",", Encoding.GetEncoding(932)))
15
+ .Select(fields => string.Format("〒{0} {1}{2}{3}", fields[2], fields[6], fields[7], fields[8])));
16
+
17
+ しかし、こう書いても質問者さんの書き方でも同じだと思うので原因がわからないです。
18
+
19
+ ---
20
+
21
+ ちなみにもし質問者さんの書き方をするならfieldsという名前は不適切ではないでしょうか?
22
+ 各行の集まり=>複数の行なのですからfieldsではなくrowsとでもいうべきだと思います。
23
+ rowsに対するパイプラインでrowsの各要素=row=fieldsと呼ぶべきかと。
24
+
25
+ ...
26
+ .Select(path => CSVFiled.Context(path.FullName, ",", Encoding.GetEncoding(932)))
27
+ .Select(rows => rows.Select(fields => string.Format("...", fields[2], ...)));