回答編集履歴

5

修正

2021/05/11 01:42

投稿

退会済みユーザー
test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
 
28
28
 
29
- //USER_CDとDATA_TYPEのTupleをキーにDictionaryを作る
29
+ //USER_CDとDATA_TYPEのTupleをキーにImportFormatのDictionaryを作る
30
30
 
31
31
  var dicFormat = new Dictionary<(string, string), DataRow>();
32
32
 

4

修正

2021/05/11 01:42

投稿

退会済みユーザー
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
 
14
14
 
15
- ImportFormatテーブルのDATA1~4のカラムを転送元として出力したいなら、下記のようなイメージで行けるのではないかと。デバッグも何もしてないので、考え方だけ参考にしてください。
15
+ ImportFormatテーブルのDATA1~4のカラムを転送元として出力したいなら、下記のようなイメージで行けるのではないかと。デバッグも何もしてないロジックを説明する為だけソースなので、考え方だけ参考にしてください。
16
16
 
17
17
 
18
18
 

3

サンプル追記

2021/05/11 01:39

投稿

退会済みユーザー
test CHANGED
@@ -5,3 +5,69 @@
5
5
 
6
6
 
7
7
  NAME_MEI、NAME_SEI、SCHOOLなどを既にそれぞれ別テーブルに持っていて、そこからマッチングして探せるとかなら可能かもしれませんが。(それでもNAME_SEIとNAME_MEI両方にあるパターン等は有り得そう)
8
+
9
+
10
+
11
+ ---
12
+
13
+
14
+
15
+ ImportFormatテーブルのDATA1~4のカラムを転送元として出力したいなら、下記のようなイメージで行けるのではないかと。デバッグも何もしてないので、考え方だけ参考にしてください。
16
+
17
+
18
+
19
+ ```C#
20
+
21
+ var tableSrc = new DataTable(); //転送元(Worktableの内容と過程)
22
+
23
+ var tableDst = new DataTable(); //出力先
24
+
25
+ var tableFormat = new DataTable(); //ImportFormatの内容と仮定
26
+
27
+
28
+
29
+ //USER_CDとDATA_TYPEのTupleをキーにDictionaryを作る
30
+
31
+ var dicFormat = new Dictionary<(string, string), DataRow>();
32
+
33
+ foreach(var row in tableFormat.AsEnumerable() )
34
+
35
+ {
36
+
37
+ dicFormat[(row["USER_CD"].ToString(), row["DATA_TYPE"].ToString())] = row;
38
+
39
+ }
40
+
41
+
42
+
43
+ foreach(var rowSrc in tableSrc.AsEnumerable() )
44
+
45
+ {
46
+
47
+ //DictionaryからUSER_CDとDATA_TYPEに対応するフォーマット取得
48
+
49
+ var rowFormat = dicFormat[(rowSrc["USER_CD"].ToString(), rowSrc["DATA_TYPE"].ToString())];
50
+
51
+
52
+
53
+ //フォーマットを元に参照するカラムを切り替えて出力
54
+
55
+ var rowDst = tableDst.NewRow();
56
+
57
+ rowDst["USER_CD"] = rowSrc["USER_CD"];
58
+
59
+ rowDst["DATA_TYPE"] = rowSrc["DATA_TYPE"];
60
+
61
+ rowDst["NAME_MEI"] = rowSrc[rowFormat["DATA1"].ToString()];
62
+
63
+ rowDst["NAME_SEI"] = rowSrc[rowFormat["DATA2"].ToString()];
64
+
65
+ rowDst["AGE"] = rowSrc[rowFormat["DATA3"].ToString()];
66
+
67
+ rowDst["SCHOOL"] = rowSrc[rowFormat["DATA4"].ToString()];
68
+
69
+ tableDst.Rows.Add(rowDst);
70
+
71
+ }
72
+
73
+ ```

2

追記

2021/05/11 01:38

投稿

退会済みユーザー
test CHANGED
@@ -4,4 +4,4 @@
4
4
 
5
5
 
6
6
 
7
- NAME_MEI、NAME_SEI、SCHOOLなどを既にそれぞれ別テーブルに持っていて、そこからマッチングして探せるとかなら可能かもしれませんが。
7
+ NAME_MEI、NAME_SEI、SCHOOLなどを既にそれぞれ別テーブルに持っていて、そこからマッチングして探せるとかなら可能かもしれませんが。(それでもNAME_SEIとNAME_MEI両方にあるパターン等は有り得そう)

1

追記

2021/05/10 08:33

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,7 @@
1
1
  取り得る値とか、何か規則性やルールが無いと不可能でしょう。
2
2
 
3
3
  AGEは数値なのでまだ判ると思いますが、NAME_MEIか、NAME_SEIどっちが入っているかをどうやって区別するんですか?SCHOOLも何が入るかよく判りません。
4
+
5
+
6
+
7
+ NAME_MEI、NAME_SEI、SCHOOLなどを既にそれぞれ別テーブルに持っていて、そこからマッチングして探せるとかなら可能かもしれませんが。