IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Substring et Length


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut Substring et Length
    Bonjour,

    J'ai un fichier parametre qui se présente plus ou moins comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #Inscriviez les lignes a rechercher après chaque nombre
    #DEBUT
    1. blablabla
    2. blabla
    3. blablablabla
    #FIN
    Mon programme va chercher et lire se fichier parametre pour récupérer les chaines inscrite après le nombre, voici un bout de code :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (Plignesuite.Contains("1. "))
                    {
                        chx1 = Plignesuite.Substring(3, Plignesuite.Length);
                    }

    Mon problème c'est ce que je dois inscrire après le chx1 =
    car bien sur la ligne présente ne fonctionne pas.
    Je souhaiterais récupérer toute la chaine après le "1. "
    J'avais donc eu l'idée d'utiliser le Substring pour récupérer la chaine et le lenght pour avoir toute la chaine que l'utilisateur a donné après le nombre, mais ca ne fonctionne pas

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Salut, tu peux utiliser ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    const string delimiteur = ". ";
    			string[] lignes = new string[]
    			{
    				"#DEBUT"
    			   ,"1. " + " texte de la ligne 1"
    			   ,"2. " + " texte de la ligne 2"
    			   ,"3. " + " texte de la ligne 3"
    			   ,"10. " + " texte de la ligne 1"
    			   ,"115. " + " texte de la ligne 115"
    			   ,"1478. " + " texte de la ligne 1478"
    			   ,"999999. " + " texte de la ligne 999999"
    			   ,"#FIN"
    			};
     
    			foreach (var ligne in lignes)
    			{
    				if (ligne.StartsWith("#"))//un commentaire -> ligne suivante
    				{
    					continue;
    				}
    				int indexP = ligne.IndexOf(delimiteur);
    				if (indexP == -1)
    				{
    					throw new FormatException(string.Format("La ligne n'est pas formatée correctement --> 'Nombre. '\n ligne :{0}", ligne));
    				}
    				int Id = -1;
    				string Ids = ligne.Substring(0, indexP);
    				if(!int.TryParse(Ids, out Id))
    				{
    					throw new FormatException(string.Format("L'entête de la ligne (partie avant le .) ne correspond pas à un entier valide.\n ligne :{0}", ligne));
    				}
    				int indexValeur = indexP + delimiteur.Length - 1;
    				string valeur = ligne.Substring(indexValeur, ligne.Length - indexValeur);
    				Console.WriteLine(valeur);
    			}
    Il a l'avantage de tenir compte de la taille de ton 'xxx. ' car tu allais au devant de problème après la 9ième ligne

    A+

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Pour commencer merci beaucoup pour la réponse, mais il y a un petit soucis, le code que tu as fournit par du principe que la chaine de caractère est connu, hors l'utilisateur peut écrire n'importe quel mot clé en chaine de caractere, et je dois prendre en compte cela :/

    Je ne vois pas comment faire

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    je ne comprends pas ta dernière remarque alkaz, le code de lead8209 me paraît adapté à ton problème (même si je l'aurais pas écrit comme ça).
    A aucun moment il ne se base sur un contenu particulier, t'as dû mal comprendre l'initialisation de son tableau qui n'est là que pour l'exemple.
    A toi de remplacer ce tableau en dur par la génération d'un tableau depuis ton fichier (avec un StreamReader par exemple).
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Du coup j'avoue ne pas trop bien comprendre. De ma fenetre de débutant, dans le code de lead, il y aura forcément dans le tableau les lignes inscrite "texte de la ligne [...]" et ce ne sera donc pas en fonction du fichier parametre lu via StreamReader

    J'imagine que pour compléter le puzzle il me manque une information, peut etre une ligne de code ou une modification, qui me permettrait de relier le code de lead au fait qu'il doit etre en lien avec la lecture du fichier parametre.

    Mais j'avoue etre un peu perdu la


    Jusqu'ici j'ai donc cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    StreamReader fichierparametre = new StreamReader(@"I:\Dossier\Parametres.txt");
    Plignes = fichierparametre.ReadLine();
     
    Et ici le code de lead
    Je ne vois pas comment unir les deux :'(

  6. #6
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Là c'est au-delà de la catégorie "débutant", on est dans la catégorie "cherche pas à comprendre" ... Bon, t'es même pas obligé de remplir un tableau intermédiaire, tu peux appliquer le code de lead directement avec le ReadLine du StreamReader. Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    using (StreamReader sr = new StreamReader("monfichier")) {
       string ligne = "";
       while ((ligne = sr.ReadLine()) != null) {
          // le code du foreach de lead
       }
    }
    Plus je connais de langages, plus j'aime le C.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par alkaz Voir le message
    Je souhaiterais récupérer toute la chaine après le "1. "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    foreach (string line in File.ReadAllLines(filename))
    {
      [...]
      int pos = line.IndexOf(". ");
      if ( pos != -1 )
      {
        pos += 2;
        int count = line.Length - pos;
        if (count > 0)
          chx1 = line.Substring(pos, count);
      }
      [...]
    }

Discussions similaires

  1. Substring replace length postgresql
    Par nponzo dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 11/12/2008, 12h13
  2. Problème avec un substring
    Par yoda_style dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 11h29
  3. ERROR: pg_atoi: zero-length string
    Par steelspirit92 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 23/08/2003, 22h29
  4. [sous-chaine] Avec strpos ou substring ??
    Par terziann dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 17/07/2003, 15h28
  5. Réponses: 2
    Dernier message: 10/07/2002, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo