从.txt文件中读取数据并根据无限可能的整数分别打印输出

时间:2016-01-04 02:52:39

标签: java

如果这个问题之前已被问过一千次,我道歉。我尝试过搜索但未能找到我想要的东西。

我对编码很新,所以我正在努力研究我姐姐在她的工作场所需要进行一些练习的项目。

她需要的程序看起来很简单,而且我已经想到了一切但只有一部分(尽管这是该计划最重要的方面)。基本上,她需要的程序扫描.txt文件中的数据,并根据与该int关联的String对应的特定int值以所需格式打印出信息。

文本文件有两列,基本上如下所示:

Column A     Column B
Quantity     CPT code
1            V5008
1            V5010
1            V5285
2            0002M
2            0058T
3            0111T
3            0169T
等等.....等等。我遇到的问题是这些列表每天都在变化,以及它们中的值,它们很长(我目前用于创建程序的列表长度为11185行)。此外,无法知道第一列中的值是什么,输出是如何分离的。第一列中的数字可以是1,2,16,147,8000 ......可以是任何数字。

需要根据这些数字单独打印输出。例如,上面的输出如下所示:

If IsCPT("V5008,V5010,V5285") Then
   If Quantity > 1 AND Allowance > 0.0 Then
      HoldBill("MUE Edits")
   End If

ElseIf IsCPT("0002M,0058T") Then
   If Quantity > 2 AND Allowance > 0.0 Then
      HoldBill("MUE Edits")
   End If

ElseIf IsCPT("0111T,0169T") Then
   If Quantity > 3 AND Allowance > 0.0 Then
      HoldBill("MUE Edits")
   End If

我在将第二列中的字符串彼此分开时遇到了麻烦,因此它们并非全部打印在一起。现在,我将第二列存储在一个String数组中,一旦读入所有内容,循环并打印每个索引。

如果第一列可以是任何数字,您将如何根据第一列分隔第二列?您是否会使用二维数组,将int值存储在每行的第一个索引中并使用关联的字符串填充行?

我很抱歉这个冗长的问题,但我希望尽可能彻底。如果任何想要帮助的人需要查看我编写的一些代码,我很乐意发布。请告诉我!

提前感谢您的帮助!

编辑:感谢您的回复。下面是我的班级的样子,它负责扫描数据。

import java.util.Arrays;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.util.ArrayList;

public class Processor {

private String[] finalArray;
private int numberOfCpt;
private int quantity;
private int i = 1;
private int length;
private int length1;
private int lineLength;

public Processor() {
  finalArray = new String[0];
}

public void addCptToArray(String cptCodeIn) {
  finalArray = Arrays.copyOf(finalArray, finalArray.length + 1);

  length = finalArray.length;
  finalArray[length - 1] = cptCodeIn;  
}

public void newArray() {
  length = finalArray.length;

  finalArray = Arrays.copyOf(finalArray, finalArray.length - length);
}

public int getNumberOfCpt() {
  return numberOfCpt;
}

public void readFile(String fileIn) throws IOException {

String fileName = fileIn;
Scanner scan = new Scanner(new File(fileName));
scan.nextLine();

while (scan.hasNext()) {

String file = scan.nextLine();
Scanner scan2 = new Scanner(file);
quantity = scan2.nextInt();
String cpt = scan2.next(); 

for (i = i; i <= finalArray.length + 1;) {
  if (quantity == i) { 
   addCptToArray(cpt);
   break;
}

  if (quantity != i) {
   i++;
 }
}

numberOfCpt = finalArray.length - 1;     
} 


public String generateReport() {
String output = "";
String output1 = "";
output += "If ";
String line1 = "";

for (int j = 0; j < finalArray.length; j++) {
   output1 += finalArray[j] + ",";
}

for (String line : charLimiter(output1, 320)) {
   lineLength = line.length();
   length1 = line.length() - 6;

if (line.substring(length1, lineLength).contains(",")) {
   line1 = line.substring(length1, lineLength).replace(",", "");
   line = line.substring(0, length1);
   line = line.concat(line1);
}

if (lineLength == 318) { 

   output += "IsCPT" + "(" + "\"" + line 
                     + "\""  + ")" + " or\n\n";
}

else {
   output += "IsCPT" + "(" + "\"" + line + "\""  
                     + ")" + " Then";

   output += "\n   If Quantity > " + quantity + " AND Allowance >" 
                     + " 0.0 Then \n      HoldBill(\"MUE Edits\")"
                     + "\n   End If";
  }
}

return output;
}

private static ArrayList<String> charLimiter(String input, int limit) {
ArrayList<String> list = new ArrayList<>();
String[] parts = input.split(",");
StringBuilder sb = new StringBuilder();
  for (String part : parts) {
    if (sb.length() + part.length() > limit) {
      list.add(sb.toString().substring(0, sb.toString().length()));
      sb = new StringBuilder();
  }
     sb.append(part + ",");
}

if (sb.length() > 0) {
     list.add(sb.toString());
}

return list;
}

我知道readFile()下的for循环看起来很糟糕(可能是程序的其余部分)。我一直在尝试一切可能的方法让这个工作,所以一些变量和方法是创建但未使用。

1 个答案:

答案 0 :(得分:0)

如果两列中的一列是唯一的,那么使用某种地图是可行的方法。假设列B(代码)是唯一的,您将拥有一个存储代码的地图 - &gt;数量。您可以使用HashMap集合。

HashMap<String, int> codesToQuantities = new HashMap<>();

//pseudo-code describing the rough algorithm of parsing the file
for(String line in yourDataFile){
    String[] columns = line.split(" "); //or however you split up the columns based on the input

    String code = columns[1];
    int quantity = Integer.parseInt(columns[0]);

    codesToQuantities.put(code, quantity);
}

然后,只要您想获得给定代码'codeXYZ'的数量,您就可以使用:

int quantityOfCodeXYZ = codesToQuantities.get(codeXYZ);

地图是计算中的基本数据类型之一,因此如果您不熟悉它,我建议您阅读它们。它们非常强大。