Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析文本文件_Java_Sql_Parsing - Fatal编程技术网

Java 解析文本文件

Java 解析文本文件,java,sql,parsing,Java,Sql,Parsing,我正在尝试将这个.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

我正在尝试将这个.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
整个文件结构正确,因此应始终遵循相同的模式,因此,当它达到“prob”时,我一直在试图找到一种方法来检查下一个值是否为min/max,是否未打印,否则在读取min/max后打印,我无法执行

当程序找到一个min/max属性时,我希望程序的输出如下:

INSERT INTO `test`.`drops` (mobID, itemID, prob, min, max);
 VALUES (0908100, 2060000, 0.108, 10, 20);
如果prob后没有最小/最大值,则同一行应如下所示:

INSERT INTO `test`.`drops` (mobID, itemID, prob, min, max)
 VALUES (0908100, 2060000, 0.108, 1, 1);
货币将始终为itemID 0,最小/最大值默认为货币值。 因此:

Monster_Drops1.txt以这种格式出现,Monster 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

我要感谢每一个花时间帮助我的人,这是非常非常有帮助的


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

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


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

你有一大堆
if
else if
语句。我怀疑这是您的问题。欢迎使用堆栈溢出!看起来您需要学习使用调试器。请随意使用一些补充调试技术。如果您以后仍然有问题,请随时返回一个演示您的问题的示例。我绝对建议您按照前面的评论建议学习调试器。同时,第一个print语句似乎是在以下条件之后打印的:
else if(namn.equals(“prob”)&&money.equals(“”)
。第二个print语句是在以下条件之后打印的:
else if(namn.equals(“max”)和&!min.equals(“1”)
。非常感谢您的快速回复!是的,这是相当混乱的,虽然代码在我尝试做的大部分工作中都有效,只是我不能把我需要的所有信息都放在一行中,我需要mobID、item、prob,如果在prob之后出现min/max。我被prob后面的min/max部分卡住了,我看不懂下一行,min/max也不总是出现。我肯定会研究调试,但我不认为这是问题所在,我只是不知道如何将所有信息读入一行:)还有一件事,我真的不知道如何在不消除发生这种情况的原因的情况下缩短代码,将其重写为更好的解决方案是我无法做到的,这就是为什么它看起来像这样,当前代码依赖于这些东西来生成输出,我知道问题发生的原因,但我不知道如何解决它:/n您有一堆
if
else if
语句。我怀疑这是您的问题。欢迎使用堆栈溢出!看起来您需要学习使用调试器。请随意使用一些补充调试技术。如果您以后仍然有问题,请随时返回一个演示您的问题的示例。我绝对建议您按照前面的评论建议学习调试器。同时,第一个print语句似乎是在以下条件之后打印的:
else if(namn.equals(“prob”)&&money.equals(“”)
。第二个print语句是在以下条件之后打印的:
else if(namn.equals(“max”)和&!min.equals(“1”)
。非常感谢您的快速回复!是的,这是相当混乱的,虽然代码在我尝试做的大部分工作中都有效,只是我不能把我需要的所有信息都放在一行中,我需要mobID、item、prob,如果在prob之后出现min/max。我被prob后面的min/max部分卡住了,我看不懂下一行,min/max也不总是出现。我肯定会研究调试,但我不认为这是问题所在,我只是不知道如何将所有信息读入一行:)还有一件事,我真的不知道如何在不消除发生这种情况的原因的情况下缩短代码,我无法将其改写为更好的解决方案,这就是为什么它看起来像这样,当前代码依赖于这些东西来生成输出,我知道问题发生的原因,但我不知道如何修复它:/
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;
                }
        }
    }
}
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