Forum Clubic

Je deviens fou sur un bete IF

Bonjour,

Mais pas fou, completement marteau.
Je dois scanner un doc .TXT pour extraire une partie de la ligne.
Mais le doc contient parfois des lignes blanches.
Je fais donc un bete test sur mon entree.readline() pour voir si il contient qqch ou pas et dans tout les cas, il rentre dans mon IF.
Le problème c’est que comme il essaie de lire une valeur d’index inexistante, il me kicke. Je deviens barge…

[cpp] while(flagBoucle==true)
{
if((ligne=entree.readLine())!="")
{
test = ligne.substring(5,6);
if(test==“4”)
{
valeur = ligne.substring(11,21);
System.out.println(valeur);
}
}

	}

[/cpp]

C’est un bete cas basique d’école, et pourtant il me bloque… :pt1cable:
Juste pour précision, j’ai déjà essayé un
if((ligne=entree.readline())!=null)
et ca me fait la même chose.
help

si je compren bien tu recupere le 5eme caractere de la ligne…

tu devrai plutot tester si la ligne fait au moins 5 caracteres …

* while(flagBoucle==true)
*         {
*          ligne=entree.readLine();

*             if(ligne.length()>=5) // enfin je connais pas la syntaxe exacte pour la longueur
*             {
*                 test = ligne.substring(5,6);
*                 if(test=="4")
*                 {
*                     valeur = ligne.substring(11,21);
*                     System.out.println(valeur);                  
*                 }
*             }            
*             
*         }

Non, les lignes font toutes plus de 200 caractères (sauf les lignes vides évidemment)
Si je teste le 4 c’est parce que les lignes correspondantes aux infos clients que je dois récupérer commence toutes par un 4 en 5em position.
Mais je vais tester ton system sur la longueur tout de suite, ca peut marcher…
merci

alors c normal une ligne qui fait 200 caracteres n’est pas egale a “”…

plutot que de comparer 2 string avec == ou != , tu devrais utiliser la méthode Equalsignorecase (verifier le nom et les majuscules) de la classe String.

Alors la de mieux en mieux…
Merci pour vos réponses au dessus ca m’a dépatouillé.
Mais maintenant un autre problème se pose a moi:
[cpp]if (test.equalsIgnoreCase(“4”))
{
valeur = ligne.substring(11,21);
}
[/cpp]
Dans mon debug, il me marque en grand que test=“4” alors pq je ne rentre jamais (mais jamais hein) dans ce IF…

:sweat:
Je sens que je vais pleurer et me remettre au boulier compteur moi…

Vérifies la taille des deux chaînes.
Peut-être que c’est "4 " et “4”. ou autre.

Car :
[cpp]
equalsIgnoreCase

public boolean equalsIgnoreCase(String anotherString)

Compares this String to another String, ignoring case considerations. Two strings are considered equal ignoring case if they are of the same length, and corresponding characters in the two strings are equal ignoring case.

Two characters c1 and c2 are considered the same, ignoring case if at least one of the following is true:

    * The two characters are the same (as compared by the == operator).
    * Applying the method Character.toUpperCase(char) to each character produces the same result.
    * Applying the method Character.toLowerCase(char) to each character produces the same result.

Parameters:
    anotherString - the String to compare this String against.
Returns:
    true if the argument is not null and the Strings are equal, ignoring case; false otherwise.

[/cpp]

ca marche…
merci a tous pour votre aide et vos conseils…