2013-08-15 2 views
0

У меня есть файлы CSV с заголовками и конкретными номерами. Мне нужно собрать эти номера отдельно для создания XML-файла AIM, но это не важно. Мне тяжело пытаться извлечь номера на основе их заголовков. Я пробовал разные вещи, но не мог заставить его работать. Когда я пытаюсь запустить этот код (ниже всего лишь выборка), он никогда не прекращается. Я не очень разбираюсь в Java или OpenCSV, поэтому, пожалуйста, извините, что вы собираетесь увидеть. (Это также 2 утро, и мой разум неисправно)Использование OpenCSV для извлечения определенных чисел из CSV

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

ответ

0

Я думаю, вы сбиваете с толку 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 

     } 

    } 
} 

Надеется, что это помогает.

1

Обычно один будет открыть CSV файл один раз экземпляра объекта CSVReader, а затем петли через файл вызывающего readNext.

В коде вы повторно создаете CSVReader в цикле и не вызываете readNext в своем цикле.

Смежные вопросы