【问题标题】:Using OpenCSV to extract specific numbers from CSV使用 OpenCSV 从 CSV 中提取特定数字
【发布时间】:2013-08-15 08:42:09
【问题描述】:

我有带有标题和特定数字的 CSV 文件。我需要单独提取这些数字来创建一个 AIM XML 文件,但这并不重要。我很难根据标题提取数字。我尝试了各种方法,但无法使其正常工作。当我尝试运行此代码(以下只是一个示例)时,它似乎永远不会终止。我对 Java 或 OpenCSV 不是很有经验,所以请原谅你即将看到的混乱。 (现在也是凌晨 2 点,我的脑子出了问题)

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import edu.stanford.hakan.aim3api.base.AimException;
import edu.stanford.hakan.aim3api.base.ImageAnnotation;
import edu.stanford.hakan.aim3api.usage.AnnotationBuilder;
import au.com.bytecode.opencsv.CSVReader;



public class CreateAIMFile {
public static void main(String[] args) throws IOException, FileNotFoundException,     AimException
{
    ImageAnnotation PeserAnnotation1 = new ImageAnnotation ();
    String csvFilename = "C:/Users/Daniela/Documents/ISPY/205_4493_MR1_ACRIN_6657/E25008/peser_data.csv"; //Insert file name and location
    CSVReader csvReader = new CSVReader(new FileReader(csvFilename));
    String [] nextLine = csvReader.readNext();

    //start 
    for (int i = 0; i<50; i++){ //i<50 is a random number
        while (nextLine[i] != null){
            if (nextLine[i] == "CagridId") //customize name
            {
                CSVReader csvreader = new CSVReader(new FileReader(csvFilename), ';', '\'', 1);
                Integer A = Integer.valueOf(nextLine[i]);
                PeserAnnotation1.setCagridId(A); 
            }
            else
            {
            PeserAnnotation1.setCagridId(0); 
            }
        }
    }
    for (int i = 0; i<50; i++){ 
        while (nextLine[i] != null){
            if (nextLine[i] == "PatientComment") //customize name
            {
                CSVReader csvreader = new CSVReader(new FileReader(csvFilename), ';', '\'', 1);
                PeserAnnotation1.setComment(nextLine[i]); 
            }
        else
            {
                PeserAnnotation1.setComment("");
            }
        }
    }
AnnotationBuilder.saveToFile(PeserAnnotation1, "./AIMFileName.xml", "AIM_v3.xsd");     //customize name of XML file
    System.out.println(AnnotationBuilder.getAimXMLsaveResult());
}
}

【问题讨论】:

    标签: java csv opencsv aiml


    【解决方案1】:

    通常通过实例化 CSVReader 对象打开 CSV 文件一次,然后循环调用 readNext 文件。

    在您的代码中,您正在循环中重新实例化 CSVReader,而不是在循环中调用 readNext。

    【讨论】:

      【解决方案2】:

      我认为你在混淆 csvReader.readNext();用 csvReader.readAll();

      试试这个(未编译!):

      String headerLine = csvReader.readNext();
      
      List numbersInHeader = new ArrayList();
      for(int i = 0 ; i < headerLine.length ; i++){
          if(headerLine[i].equals("YouHeaderNameHere") || headerLine[i].equals("OtherNumberHeader")){
              numberInHeader.add(i);
          } 
      }
      String line[] = null;
      while((line = csvReader.readNext()) != null){
          for(int i = 0 ; i < line.length ; i++){
              if(numbersInHeader.contains(i)){ 
                  // This is a number do you work here
      
              }
      
          }
      }
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2017-02-02
        • 1970-01-01
        • 1970-01-01
        • 2022-12-18
        • 1970-01-01
        • 2022-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多