2016-01-28 1 views
0

Dans mon programme je peux lire un fichier csv. Ligne par ligne j'analyse des informations à une méthode. MAIS si le csv ne passe pas la vérification if, je ne veux pas appeler "otherMethod (id, new);" du tout. Donc tout le CSV doit passer, avant d'appeler otherMethod. Donc, ma question est: Comment puis-je lire dans tout le csv dans une sorte de tampon, vérifier si elle passe le test if et le traiter ensuite (ligne par ligne)?Lire csv dans le tampon, vérifier s'il passe des contrôles -> transmettre l'information ligne par ligne à la méthode

boolean csvPassed = true; 
int index = 0; 
double id = Double.NaN, new = Double.NaN; 

while ((String line = reader.readLine()) != null) { 
    Scanner scanner = new Scanner(line); 
    scanner.useDelimiter(";"); 
    while (scanner.hasNext()) { 
     //check the csv line by line 
     if (index == 0) 
      id = Integer.parseInt(data); 
     else if (index == 1) { 
      new = Integer.parseInt(data); 
      if (new == 10) 
        csvPassed = false 
     } 
     //whatever you want to do here 
    } 
} 

//after the file is checked 
if(csvPassed){ 
    // If the csv passes the check, call the method line by line... 
    otherMethod(id, new); 
} 
+0

Si le CSV n'est pas très grand, vous pouvez lire tous les nombres dans un 'ArrayList'. Si elle est grande alors vous devez faire deux passes à travers le csv. Notez que vous pouvez arrêter de traiter des lignes supplémentaires dès que vous voyez que la valeur est 10. Enfin, votre variable nommée 'new' doit être renommée. –

+0

Est-ce que ma réponse ci-dessous a résolu votre problème? Si oui, alors ce serait bien si vous l'acceptez, sinon laissez un commentaire indiquant votre problème s'il vous plaît. – sebhaub

Répondre

3

Ceci peut vous aider.

BufferedReader reader = new BufferedReader(new FileReader("<YOUR_FILENAME>")); 
//your buffer to store the lines of your csv 
List<Integer[]> lines = new LinkedList<>(); 
//a flag to indicate the success 
boolean passed = true; 
//read in the file line by line 
String currentLine; 
while((currentLine = reader.readLine()) != null){ 
    //split the line up at your delimiter 
    String[] lineSplit = currentLine.split(";"); 
    //the array to store the parsed integers of the current line 
    Integer[] parsedLine = new Integer[lineSplit.length]; 

    //process each element of that line and check for your condition 
    for(int i = 0; i < lineSplit.length; i++){ 
     //make sure you can parse that string 
     parsedLine[i] = Integer.parseInt(lineSplit[i]); 
     if(parsedLine[i] == 10){ 
      //Maybe you could also exit your loop here and clear the list? 
      passed = false; 
     } 
    } 
    //add this line to your buffer 
    lines.add(parsedLine); 
} 

//If all lines passed the condition, process line by line out of your buffer 
if(passed){ 
    //make sure you have the 2 values in the array 
    for(Integer[] line : lines){ 
     otherMethod(line[0], line[1]); 
    } 
} 
+0

Il veut lire le fichier while dans une sorte de tampon, et si toutes les lignes passent la vérification pour ne pas contenir un "10" alors il veut appeler une autre méthode ligne par ligne? – sebhaub