• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

テキストの各行をキーと値に分離し、複数テキストファイルを読み込み、キーを突き合わせ照合し、その結果を表示するGUIユーテリティです。


コミットメタ情報

リビジョン05f45330c90be2bc4303f5b7228d87209e9542fb (tree)
日時2011-10-16 18:21:09
作者seraphy <seraphy@dime...>
コミッターseraphy

ログメッセージ

・空行を読み飛ばすように修正
・コメント追加

変更サマリ

差分

--- a/src/textkeymatcher/entity/Columns.java
+++ b/src/textkeymatcher/entity/Columns.java
@@ -10,8 +10,18 @@ package textkeymatcher.entity;
1010 */
1111 public interface Columns {
1212
13+ /**
14+ * 有効な列数
15+ * @return 列数
16+ */
1317 int getSize();
1418
19+ /**
20+ * 指定したインデックスの列データを取得する.<br>
21+ * 該当するインデックスがない場合は空文字が返されます.<br>
22+ * @param colIndex インデックス
23+ * @return 列データ、もしくは空文字
24+ */
1525 String getAt(int colIndex);
1626
1727 }
--- a/src/textkeymatcher/service/ColumnSplitter.java
+++ b/src/textkeymatcher/service/ColumnSplitter.java
@@ -12,6 +12,11 @@ import textkeymatcher.entity.Columns;
1212 */
1313 public interface ColumnSplitter {
1414
15+ /**
16+ * 文字列行を列データとして切り出す.<br>
17+ * @param line 文字列行
18+ * @return 切り出された列データ
19+ */
1520 Columns splitColumns(String line);
1621
1722 }
--- a/src/textkeymatcher/service/DefaultLineDataBuilder.java
+++ b/src/textkeymatcher/service/DefaultLineDataBuilder.java
@@ -4,20 +4,31 @@
44 */
55 package textkeymatcher.service;
66
7+import org.apache.commons.lang3.StringUtils;
78 import textkeymatcher.entity.Columns;
89 import textkeymatcher.entity.LineData;
910
1011 /**
11- *
12+ * 既定の文字列行から行データを構築するラインデータビルダー.<br>
1213 * @author seraphy
1314 */
1415 public class DefaultLineDataBuilder implements LineDataBuilder {
1516
17+ /**
18+ * 列を切り出すスプリッタ
19+ */
1620 private ColumnSplitter splitter;
1721
22+ /**
23+ * キーの列位置
24+ */
1825 private int keyColumn;
1926
27+ /**
28+ * 値の列位置
29+ */
2030 private int valueColumn;
31+
2132
2233 public DefaultLineDataBuilder(ColumnSplitter splitter, int keyColumn, int valueColumn) {
2334 if (splitter == null) {
@@ -32,6 +43,7 @@ public class DefaultLineDataBuilder implements LineDataBuilder {
3243 public LineData parse(String line) {
3344 Columns cols = splitter.splitColumns(line);
3445
46+ // キー列の取得
3547 String key;
3648 if (keyColumn >= 0) {
3749 key = cols.getAt(keyColumn);
@@ -39,6 +51,14 @@ public class DefaultLineDataBuilder implements LineDataBuilder {
3951 key = line;
4052 }
4153
54+ // 列数1以下でキー列が空であれば無効な行とする.
55+ if (cols.getSize() <= 1) {
56+ if (StringUtils.isBlank(key)) {
57+ return null;
58+ }
59+ }
60+
61+ // 値
4262 String value;
4363 if (valueColumn >= 0) {
4464 value = cols.getAt(valueColumn);
--- a/src/textkeymatcher/service/LineDataBuilder.java
+++ b/src/textkeymatcher/service/LineDataBuilder.java
@@ -7,12 +7,17 @@ package textkeymatcher.service;
77 import textkeymatcher.entity.LineData;
88
99 /**
10- *
10+ * 行データを解析しラインデータを構築します.<br>
1111 * @author seraphy
1212 */
1313 public interface LineDataBuilder {
1414
15-
15+ /**
16+ * 行を解析し、ラインデータを返します.<br>
17+ * コメントや空行など有効なラインデータでない場合はnullを返します.<br>
18+ * @param line 行データ
19+ * @return ラインデータ
20+ */
1621 LineData parse(String line);
1722
1823 }
--- a/src/textkeymatcher/service/LineDataLoader.java
+++ b/src/textkeymatcher/service/LineDataLoader.java
@@ -16,14 +16,20 @@ import java.nio.charset.Charset;
1616 import textkeymatcher.entity.LineData;
1717
1818 /**
19- *
19+ * 文字列を読み取り、行をカラムに分解して{@link LineData}に変換しコールバックに引き渡すローダー.<br>
2020 * @author seraphy
2121 */
2222 public class LineDataLoader {
2323
24-
24+ /**
25+ * ラインデータを受け取るコールバック
26+ */
2527 public interface LineDataLoaderCallback {
2628
29+ /**
30+ * 解析結果のラインデータを受け取ります.<br>
31+ * @param line ラインデータ
32+ */
2733 void fetch(LineData line);
2834
2935 }
@@ -49,7 +55,10 @@ public class LineDataLoader {
4955 String line;
5056 while ((line = br.readLine()) != null) {
5157 LineData lineData = builder.parse(line);
52- callback.fetch(lineData);
58+ if (lineData != null) {
59+ // 有効なラインデータのみ結果を引き渡す.
60+ callback.fetch(lineData);
61+ }
5362 }
5463
5564 } finally {