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

Windows Forms Discussion :

Condition pour copier dans un fichier


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Condition pour copier dans un fichier
    Bonjour,

    Mes conditions semblent ne pas fonctionner et je ne parviens pas a comprendre pourquoi. j'ai essayé les opérateur "|" et "||" sans succès, voici le bout de 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
     
    string[] myString = File.ReadAllLines(@"./myfile");
                    foreach (string newLine in myString)
                    {
                        if (newLine.Contains(removeName + ";"))
                        {
                            string[] value = newLine.Split('=');
                            remove = Regex.Replace(value[0], "[a-zA-Z]", "");
                        }
     
                        if (remove != "")
                        {
                            if (!newLine.Contains("string" + remove) || !newLine.Contains("string2" + remove) || !newLine.Contains("string3" + remove))
                            {
                                sw.Write(newLine);
                                sw.Write(Environment.NewLine);
                            }
     
                        }
     
                    }
    sw.Close();
    Dans tous les cas, les chaines de caractères non désirées se retrouvent dans le fichier.

  2. #2
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Et ou remets tu remove a "" s'il a été remplis ?

    Autre conseil

    Utilise plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    remove.Equals(string.Empty);
    ou
    remove.Lenght==0
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Je précise ce que je tente de faire aussi:

    Un fichier ini dans lequel sont stockés des clés et valeurs sous cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [abc]
    abc0=qqch
    abc1=autrech
    [def]
    def0=qqch
    def1=autrech
    [ghi]
    ghi0=qqch
    ghi1=autrech
    donc je cherche à supprimer toutes les entrées ayant une valeur numérique correspondante à 'remove' dans mon cas.
    Par exemple ne pas copier tout ce qui contient un 0 (pour faire court)

    pour 'remove' au premier passage il ne contient rien (et il n est pas null).
    je ne peux en aucun cas utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    remove.Length == 0 ou remove.Equals(string.Empty);
    ca me retourne cette erreur:
    "La référence d'objet n'est pas définie à une instance d'un objet"
    sinon voici le code complet:
    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
     
            private void delete_BTN_Click(object sender, EventArgs e)
            {
                if (MessageBox.Show("Etes-vous sûr de vouloir effacer cette entrée: \r\n" + entryName, "", MessageBoxButtons.OKCancel) == DialogResult.OK)
                {
                    string[] myString = File.ReadAllLines(@"./file.ini");
                    string removeName = theList_CBOX.SelectedItem.ToString();
                    int j = 0;
                    string[] car = new string[(theList_CBOX.Items.Count)-1];
                    StreamWriter sw = new StreamWriter(Environment.ExpandEnvironmentVariables("%temp%") + @"\temp");
     
                    foreach (string newLine in myString)
                    {
                        if (newLine.Contains(removeName + ";"))
                        {
                            string[] srv = newLine.Split('=');
                            remove = Regex.Replace(srv[0], "[a-zA-Z]", "");
                        }
     
                        if (remove != "")
                        {
                            if (!Regex.IsMatch(newLine, "abc" + remove) || !Regex.IsMatch(newLine, "def" + remove) || !Regex.IsMatch(newLine, "ghi" + remove))
                            {
                                sw.Write(newLine);
                                sw.Write(Environment.NewLine);
                            }
     
                        }
     
                    }
     
                    sw.Close();
                    File.Delete(iniPath);
                    File.Move(Environment.ExpandEnvironmentVariables("%temp%") + @"\temp", @"./file.ini");
                }
            }
    C'est la première fois que je patauge sur des conditions \o/

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    pour 'remove' au premier passage il ne contient rien (et il n est pas null).
    je ne peux en aucun cas utiliser:

    remove.Length == 0 ou remove.Equals(string.Empty);
    ca me retourne cette erreur:
    "La référence d'objet n'est pas définie à une instance d'un objet"
    Ca veut dire qu'il est null contrairement a ce que tu crois

    Si tu declare

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string remove=String.Empty;
    Tu n'aura pas ce probleme

    Et je repete ma question qui est le coeur de ton problème

    Et ou remets tu remove a "" s'il a été rempli ?
    En le disant autrement
    Et ou reset remove s'il a été rempli ?
    Ou encore
    Et ou remets tu remove a String.Empty s'il a été rempli ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par olibara Voir le message

    Et je repete ma question qui est le coeur de ton problème

    Et ou remets tu remove a "" s'il a été rempli ?
    En le disant autrement
    Et ou reset remove s'il a été rempli ?
    Ou encore
    Et ou remets tu remove a String.Empty s'il a été rempli ?
    Nulle part. Il est juste déclaré comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public string remove = "";
    Le soucis ne serait pas dans ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (!Regex.IsMatch(newLine, "item" + remove) || !Regex.IsMatch(newLine, "meti" + remove) || !Regex.IsMatch(newLine, "key" + remove))
     
    [ -> adapté pour l'exemple ci dessous]
    je veux retirer les informations me basant sur la valeur d une clé.
    la valeur est (imaginons) 'myvalue'
    En ayant la valeur de la clé, je récupère la chaine numérique uniquement de la clé possédant la valeur 'myValue'

    [section1]
    item0=myValue;
    [section2]
    meti0=anotherValue;
    [section3]
    key0=someValue;

    dans ce cas, je cherche à ne pas copier toutes les chaines contenant celles-ci:
    item0
    meti0
    key0

    puisque la chaine numérique de la clé ayant myValue en paramètre est 0

    Or, justement ce bout de code remet les meme informations dans le nouveau fichier y compris celles que je ne veux pas >.>


    J'espère t'avoir éclairci \o/

  6. #6
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Nulle part.
    Ca me semble déja etre le premier problème logique tu devrais le resetter a chaque boucle tu ne crois pas ?

    Ou alors j'ai rien compris a ce que tu veux faire

    Il est juste déclaré comme ceci:
    public string remove = "";
    S'il est vraiment déclaré comme ca je ne vois pas pourquoi tu recois cette erreur

    remove.Length == 0 ou remove.Equals(string.Empty);
    ca me retourne cette erreur:
    "La référence d'objet n'est pas définie à une instance d'un objet"
    A moins que Regex.Replace puisse retourner null
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Désolé pour le retard de la reponse, j'ai du aller reprendre ma fille à l'école, elle est malade :/

    Sinon ce n'est pas faux pour le remove. Merci déjà pour ca

    Ceci dit, je pense que le problème reste dans les Regex ...
    Pour moi, ma condition dit:

    Si la chaine ne contient pas 'string1' ou 'string2' ou 'string3' tu copie dans le fichier 'temp'

    Or ce n est pas le cas.
    La condition fonctionne uniquement dans ce cas:

    ===> admettons que remove est égal à 0 (Zero)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (!Regex.IsMatch(newLine, "string" + remove))
    et si je met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (!Regex.IsMatch(newLine, "string" + remove) || !Regex.IsMatch(newLine, "anotherString" + remove) || !Regex.IsMatch(newLine, "someString" + remove))
    ca ne fonctrionne pas et il inscris les chaines non désirées.
    Donc dans ce cas il réécrit ceci:

    [section]
    string0=uneValeur;
    [section2]
    anotherString=uneValeur;
    [section3]
    someString=uneValeur;


    Je ne vois pas ce qui cloche dans ma condition

  8. #8
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Je ne vois pas ce qui cloche dans ma condition
    Moi si !

    Et compte tenu de la premiere erreur

    Sinon ce n'est pas faux pour le remove. Merci déjà pour ca
    Une petite révision des fondamentaux logique me semble nécessaire
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    J'ai trouve

    Au lieu de ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (!Regex.IsMatch(newLine, "item" + remove) || !Regex.IsMatch(newLine, "meti" + remove) || !Regex.IsMatch(newLine, "key" + remove))
    je devais utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (!(Regex.IsMatch(newLine, "item" + remove) || Regex.IsMatch(newLine, "meti" + remove) || Regex.IsMatch(newLine, "key" + remove)))
    Ne connaissant a la base que le langage de PHP j'avais du mal a comprendre pourquoi ma premiere condition ne fonctionnait pas

    Merci

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par olibara Voir le message
    Une petite révision des fondamentaux logique me semble nécessaire
    Tu peux me rediriger vers un site valable à ce sujet?

  11. #11
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Ce que tu aurais du ecrire en réalité

    Soit une contition negative (tu ecris)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (!Regex.IsMatch(newLine, "string" + remove) 
        && !Regex.IsMatch(newLine, "anotherString" + remove) 
        && !Regex.IsMatch(newLine, "someString" + remove))
    Soit une condition positive (tu n'ecris pas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (Regex.IsMatch(newLine, "string" + remove) 
        || Regex.IsMatch(newLine, "anotherString" + remove) 
        || Regex.IsMatch(newLine, "someString" + remove))
    Je n'ai pas de site en particulier developpant des cours ou exercices de logique mais que ce soit en PHP, C, VB C# la premiere chose a maitriser c'est la logique
    Et la premiere chose c'est déja la logique booléenne OU et ET ce n'est pas la meme chose !
    En semantique linguistique on a souvent tendance negliger la nuance ou mélanger les deux

    Si Jean n'est pas dans le jardin ET qu'il n'est pas dans la piscine ET qu'il n'est pas au bar c'est qu'il est dans sa chambre.
    Signifie en logique booleene qu'il sera dans sa chambre si les trois premiere conditions sont remplies

    Si Jean n'est pas dans le jardin OU qu'il n'est pas dans la piscine OU qu'il n'est pas au bar c'est qu'il est dans sa chambre.
    Signifie en logique booleene qu'il peut etre dans sa chambre si une des trois premiere conditions est remplie meme si en francais c'est sans doute pas vraiment ce qu'on a voulu dire
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/04/2006, 11h44
  2. [DOS] Commande pour écrire dans un fichier texte
    Par Jeff87-01 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 28/03/2006, 01h04
  3. Réponses: 3
    Dernier message: 21/03/2006, 13h12
  4. :?: Dialogue explorer pour copier/déplacer un fichier
    Par Don Quiche dans le forum Windows
    Réponses: 5
    Dernier message: 09/07/2004, 18h49
  5. [VB6] Api pour supprimer dans un fichier INI
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 20/02/2003, 08h16

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