2010-08-10 11 views
0

Je souhaite lire les 1ère, 4ème, 7ème, etc. (toutes les 3 lignes) à partir d'un fichier texte, mais je ne sais pas comment procéder car nextLine() lit tout séquentiellement. Merci pour vos suggestions?Lecture de certaines lignes à partir de fichiers texte

Scanner in2 = new Scanner(new File("url.txt")); 

while (in2.hasNextLine()) { 
    // Need some condition here 
    String filesURL = in2.nextLine(); 
} 

Répondre

2

Si vous ne possédez pas déjà un indice qui vous indique le décalage du fichier où chaque ligne commence dans le fichier, alors la seule façon de trouver chaque ligne est de lire le fichier de manière séquentielle. Etes-vous sûr que l'objectif ne se limite pas à/output/aux 1ère, 4ème, 7ème, etc ... lignes? Vous pouvez lire toutes les lignes de manière séquentielle, mais ne conserver que celles qui vous intéressent.

8

Utilisez un compteur et l'opérateur % (module) pour que toutes les trois lignes soient lues.

Scanner in = new Scanner(new File("url.txt")); 

int i = 1; 

while (in.hasNextLine()) { 
    // Read the line first 
    String filesURL = in.nextLine(); 

    /* 
    * 1 divided by 3 gives a remainder of 1 
    * 2 divided by 3 gives a remainder of 2 
    * 3 divided by 3 gives a remainder of 0 
    * 4 divided by 3 gives a remainder of 1 
    * and so on... 
    * 
    * i++ here just ensures i goes up by 1 every time this chunk of code runs. 
    */ 
    if (i++ % 3 == 1) { 
     // On every third line, do stuff; here I just print it 
     System.out.println(filesURL); 
    } 
} 
+2

+1 gentil, mais moyen de ruiner une éducation. Eh bien, au moins, je serai toujours payé ... – karim79

+1

@ karim79: J'ai commenté mon code pour expliquer comment fonctionne l'opérateur, si cela aide ... – BoltClock

+1

Err, qui ne lira une ligne que toutes les trois fois à travers le boucler et traiter chaque ligne une fois (si le traitement est dans le 'if') ou traiter chaque ligne trois fois (si elle est en dehors du' if'). – paxdiablo

5

Vous lire chaque ligne, mais seulement processus chaque troisième:

int lineNo = 0; 
while (in2.hasNextLine()) { 
    String filesURL = in2.nextLine(); 
    if (lineNo == 0) 
     processLine (filesURL); 
    lineNo = (lineNo + 1) % 3; 
} 

Le cycle lineNo = (lineNo + 1) % 3 de volonté lineNo par 0,1,2,0,1,2,0,1,2,... et les lignes ne seront traitées quand il est zéro (donc les lignes 1, 4, 7, ...).

+0

+1 pour repérer l'erreur dans ma réponse et fournir le bon code :) – BoltClock

Questions connexes