2017-08-07 89 views
1

我想将这个.txt文件转换为SQL查询,我可以读入SQLite数据库,问题是我无法在需要时打印出我需要的信息。解析文本文件

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

只有1项与此ID,但它打印两次:

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

整个文件的结构正确因此应始终遵循相同的模式,所以当它达到“概率”我一直在努力寻找一种方法来检查下一个值是最小/最大值,如果它不打印,否则打印后读取最小/最大值,我一直无法。

我从节目想会是这样的,当它找到一个最小/最大属性的输出:

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); 

钱总是itemID 0,最小/最大值默认为货币值。 so:

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 
+0

你有一堆'if'和'else if'语句。我怀疑这是你的问题。 –

+0

欢迎来到Stack Overflow!它看起来像你需要学习使用调试器。请帮助你一些补充性的调试技术。如果您之后仍然遇到问题,请随时返回一个显示您的问题的[最小化,完整和可验证示例](http://stackoverflow.com/help/mcve)。 –

+0

我绝对推荐你像以前的评论所建议的那样研究一下调试器。 与此同时,看起来第一个打印语句是在此条件之后打印的:'else if(namn.equals(“prob”)&& money.equals(“”))'。在此条件之后打印第二个打印语句:'else if(namn.equals(“max”)&&!min.equals(“1”))'。 –

回答

0

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

我确实找到了这个问题的答案,它确实很简单,我使用扫描器将文件读入ArrayList,然后修改该开关以给我正确的输出。