6 votes

En Scala, comment arrêter de lire les lignes d'un fichier dès qu'un critère est rempli ?

En lisant des lignes dans une boucle foreach, une fonction recherche une valeur par une clé dans un fichier texte structuré de type CSV. Une fois qu'une ligne spécifique a été trouvée, il est absurde de continuer à lire des lignes à la recherche de quelque chose qui s'y trouve. Comment s'arrêter puisqu'il n'y a pas d'instruction break en Scala ?

9voto

Randall Schulz Points 18820

Le système Source est paresseuse. Vous pouvez lire des caractères ou des lignes en utilisant takeWhile o dropWhile et l'itération sur l'entrée ne doit pas aller plus loin que nécessaire.

6voto

huynhjl Points 26045

Pour compléter la réponse de Randall. Par exemple, si la clé se trouve dans la première colonne :

val src = Source.fromFile("/etc/passwd")
val iter = src.getLines().map(_.split(":"))
// print the uid for Guest
iter.find(_(0) == "Guest") foreach (a => println(a(2)))
// the rest of iter is not processed
src.close()

2voto

Jeriho Points 1759

Les réponses précédentes supposaient que vous vouliez lire les lignes d'un fichier, je suppose que vous voulez un moyen d'interrompre la boucle for à la demande. Voici ce qu'il faut faire solution Vous pouvez procéder comme suit :

breakable {
   for (...) {
     if (...) break
   }
 }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X