回答編集履歴

2

コードの明らかな間違いを修正

2019/06/14 08:52

投稿

gentaro
gentaro

スコア8949

test CHANGED
@@ -46,13 +46,13 @@
46
46
 
47
47
  ```C#
48
48
 
49
- public JSonDataFileReader {
49
+ public class JSonDataFileReader {
50
50
 
51
51
  public IEnumerable<Entry> Load(string filename) {
52
52
 
53
53
  var data = File.ReadAllText(filename);
54
54
 
55
-    var result = new List<Entry>();
55
+ var result = new List<Entry>();
56
56
 
57
57
  // ループ: dataの中身を正規表現を使って1画面分ずつマッチさせる
58
58
 

1

変更

2019/06/14 08:52

投稿

gentaro
gentaro

スコア8949

test CHANGED
@@ -1,59 +1,87 @@
1
- > どのようにすれば、
2
-
3
- > 画面┳キー━文言
4
-
5
- > ┳キー━文言
6
-
7
- > ┗キー━文言
8
-
9
- > ように切分け、メモリ上で編集するこが可能になるでょうか
1
+ 質問欄りとりを見て回答を変更ます
10
2
 
11
3
 
12
4
 
5
+ 最終的にやりたいのは
6
+
7
+ 1. JSON形式のテキストファイルを読み込む
8
+
13
- いまいち内容が掴めてませが、質問内容に書かれことをストレート受け取
9
+ 2. 読み込だデータは「画面名-項目名-現地語のテキスト」の形式とし編集できよう
10
+
11
+ 3. JSON形式のテキストファイルとして書き出す
14
12
 
15
13
 
16
14
 
17
- 1.JSONデシリアライズに成功している(画面ごとに異なるクラスor構造体があるんだろう…)
15
+ という話みたいなで、2の部分
18
16
 
19
- 2.項目名は増える可能性がある(つまり1のクラス・構造体のメンバが増える)
17
+ ```C#
20
18
 
19
+ public class Entry {
20
+
21
+ pubilc string ViewName { get; set;}
22
+
23
+ pubilc string ItemName { get; set;}
24
+
25
+ pubilc string Text { get; set;}
26
+
27
+ }
28
+
29
+ ```
30
+
21
- 3.画面単位で key-value のリスト(まりDictionary)で読込みたい(この部分は2の変更があっても修正せず済むようした
31
+ みたいなやを`List<Entry>`みたいにリスト突っ込んで扱えれば十分だと思ます。
22
32
 
23
33
 
24
34
 
25
- いうとであば、1で読み込んだオブジェクトな構造体のプロパティ・フィールドをリフレクョンを使っMemberInfoを取得し、(オブジェクトそのものか MemberInfo.Name かわかません)それをキーにして、Dictiorayに突っ込む形にな気がします。
35
+ 問題は13ですが、これを無理やJSONデシアライズ・リアライズでやろうとしいるあたりが苦労してポイントだと思います。
26
36
 
27
37
 
28
38
 
39
+ Zuishinさんがコメントされていたとおり、JSONはただのテキストファイルです。
40
+
29
- やりたい割にかな微妙な方法だと思いまし、自やりたくないですが、詳細な利用法(制限等)がわからないとこれぐらいしか思いつきません…
41
+ れを読み込んで、上記クラスのインスタンスが作れた、書き出せたりれば十です。
30
42
 
31
43
 
32
44
 
45
+ 例えば
33
46
 
47
+ ```C#
34
48
 
49
+ public JSonDataFileReader {
50
+
51
+ public IEnumerable<Entry> Load(string filename) {
52
+
53
+ var data = File.ReadAllText(filename);
54
+
55
+    var result = new List<Entry>();
56
+
57
+ // ループ: dataの中身を正規表現を使って1画面分ずつマッチさせる
58
+
59
+ var viewname = // 画面名に該当する要素を正規表現で取り出す
60
+
61
+ // ループ: マッチさせた1画面分の文字列から、各要素ごとにマッチさせる
62
+
35
- 以下、質問に対する直接的な回答ではないので、
63
+ var obj = new Entry {
64
+
65
+ ViewName = viewName,
66
+
67
+ ItemName = // 項目名に該当する要素を正規表現で取り出す
68
+
69
+ Text = // テキストに該当する要素を正規表現で取り出す
70
+
71
+ };
72
+
73
+ result.Add(obj);
36
74
 
37
75
 
38
76
 
39
- > VS2008、Frameworkは3.5、文言はjson形式で管理する方式で決まっています。
77
+ return result;
78
+
79
+ }
80
+
81
+ }
82
+
83
+ ```
40
84
 
41
85
 
42
86
 
43
- この辺に何らかの深事情があるのら無視して欲しいですが…
87
+ みたいな感じ読めまよね。(書き出す方は省略)
44
-
45
-
46
-
47
- VB.NETの経験があればご存知だと思いますので、なぜそう決まったのかわからないのですが、.NETで多言語対応する時の標準的なやり方はResourceファイルを使う方法なので、そこで苦労するぐらいなら最初から key-value の形でkeyを「画面名_項目名」とかにしてResourceファイルにゴリゴリ書いた方が良いような気がします。
48
-
49
-
50
-
51
- コメントもつけられるから、キー名だけで分かりづらくても意図は伝えられるので、管理上もメリットがありますし。(今の形式のJSONだと開発者=翻訳者じゃないと辛そう)
52
-
53
-
54
-
55
- Visual Studioのリソースエディタ画面の内容をそのままExcelやテキストエディタ等に相互にコピペできますので、開発者≠翻訳者になった場合に、作業をお願いする時にも都合が良い気がします。
56
-
57
-
58
-
59
- JSONがすでに作成済みだったり、何らかのシステムで吐き出されるものだとしても、テキストエディタ使って文字列置換すれば表形式に変更するのは秒殺でできるので、可能ならちょっと思い直した方が良い気がします。