解析文本文件

时间:2017-08-07 19:47:20

标签: java sql parsing

我正在尝试将此.txt文件转换为可以读入SQLite数据库的SQL查询,问题是我无法在需要时获取所需的信息。

此代码的问题在于,它会在到达prob属性时打印出来,然后在达到min / max属性时再次打印同一行,这次是在文件中找到正确的值。 / p>

只有1个具有此ID的项目,但它会打印两次:

0908100 ItemID: 2060000 Prob: 0.108 Min: 1 Max: 1
0908100 ItemID: 2060000 Prob: 0.108 Min: 10 Max: 20

整个文件结构合理,所以应该始终遵循相同的模式,以便当它达到" prob"我一直试图找到一种方法来检查下一个值是否为最小值/最大值,如果它不打印,否则在读取最小值/最大值后打印,我还没有。

当我找到min / max属性时,我想从程序中得到的输出是这样的:

INSERT INTO `test`.`drops` (mobID, itemID, prob, min, max);
 VALUES (0908100, 2060000, 0.108, 10, 20);

如果在概率之后没有最小值/最大值,那么相同的行应该是这样的:

INSERT INTO `test`.`drops` (mobID, itemID, prob, min, max)
 VALUES (0908100, 2060000, 0.108, 1, 1);

Money将始终为itemID 0,其中min / max默认为money的值。 这样:

INSERT INTO `test`.`drops` (mobID, itemID, prob, min, max)
 VALUES (0908100, 0, 0.65, 87, 87);

public static void main(String[] args) throws FileNotFoundException {
    int radNmr = 0;
    String mobID = "";
    String money = "";
    String item = "";
    String prob = "";
    String min = "1";
    String max = "1";

    Scanner sc = new Scanner(new File("Monster_Drops1.txt"));

    while (sc.hasNext()) {
        String namn = sc.next();
        String namn1 = sc.next();

        if ("m".equals(namn.substring(0, 1)) && !"money".equals(namn) && !"max".equals(namn) && !"min".equals(namn) ) {
            mobID = namn.substring(1);
        }

        switch(namn) {
            case "money":
                money = namn1;
                break;
            case "item":
                item = namn1;
                break;
            case "prob":
                if (!money.equals("")) {
                    money = "";
                    break;
                } else if (money.equals("")){
                    prob = namn1;
                    System.out.println(mobID + " ItemID: " + item + " Prob " + prob + " Min: " + min + " Max: " + max);
                    break;
                }
            case "max":
                if (min.equals("1")) {
                    max = namn1;
                    break;
                } else if (!min.equals("1")) {
                    max = namn1;
                    System.out.println(mobID + " ItemID: " + item + " Prob " + prob + " Min: " + min + " Max: " + max);
                    max = "1";
                    min = "1";
                    break;
                }
            case "min":
                if (max.equals("1")) {
                    min = namn1;
                    break;
                } else if (!max.equals("1")) {
                    min = namn1;
                    System.out.println(mobID + " ItemID: " + item + " Prob " + prob + " Min: " + min + " Max: " + max);
                    break;
                }
        }
    }
}

Monster_Drops1.txt有这种格式,怪物ID之后没有相关性的开始/结束标记,我刚添加它,因为当该行只有一个值时,扫描器向我抛出错误。

m0908100 Start
money 87
prob 0.65
item 2340802
prob 0.4
item 2640002
prob 0.1
item 2040002
prob 0.00003
item 2041001
prob 0.00003
item 2060000
prob 0.54
min 10
max 20
item 9010000
prob 0.98

m0740101 end
money 80
prob 0.55
item 6050000
prob 0.9
item 2041006
prob 0.00003
item 3014000
prob 0.41

1 个答案:

答案 0 :(得分:0)

我要感谢那些花时间帮助我的人,这非常有帮助!

我确实找到了这个问题的答案,而且它非常简单,我使用扫描仪将文件读入ArrayList,然后修改了Switch以给我正确的输出。