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++Builder Discussion :

RichEdit->Lines comment indiquer l'indexe de ligne


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Décembre 2002
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 35
    Par défaut RichEdit->Lines comment indiquer l'indexe de ligne
    Bonjour j'utilise Borland C++ builder6
    Je veux lire un fichier text contenant du code assembleur 8086 et séparer l'instruction l'op1 et l'op2 j'utilise 3Edit et un RichEdit. Le RichEdit (RE1) contient le texte voici le 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
     int pos,ToEnd;
     
    RE1->Lines->LoadFromFile("e:\\asm.txt");
     
    ToEnd = RE1->Text.Length() - 0;
    pos=StrToInt(RE1->FindTextA(" ",0,ToEnd,TSearchTypes()<< stMatchCase));
     
    RE1->SelStart=0;
    RE1->SelLength=pos;
    Edit1->Text=RE1->SelText;
     
     
    RE1->SelStart=pos+1;
    pos=StrToInt(RE1->FindTextA(",",0,ToEnd,TSearchTypes()<< stMatchCase));
    RE1->SelLength=pos-RE1->SelStart;
    Edit2->Text=RE1->SelText;
     
    RE1->SelStart=pos+1;
    pos=StrToInt(RE1->FindTextA(" ",0,ToEnd,TSearchTypes()<< stMatchCase));
    RE1->
    RE1->SelLength=RE1->Lines->Text.Length()-pos; /* jusqu'a la fin de tout le text !?*/
    Edit3->Text=RE1->SelText;
    le probléme c'est qua la fin si ma premiére ligne est mov ax,5 et la econde add bx,3
    le Edit3->Text contient 5 add bx,3
    comment spécifier la ligne sur laquelle on travail, je veux que le Text.Lenght() ne marche que pour chaque ligne séparement est ce possible ?

    Il faut décocher l'option "Désactiver le BBCode dans le message" pour que les balises [code] soient prises en compte.
    Merci d'en tenir compte la prochaine fois [henderson]


    Merci

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    voir l'aide : TRichEdit::CaretPos

    A plus !

  3. #3
    Membre averti
    Inscrit en
    Décembre 2002
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 35
    Par défaut
    Bonjour,
    cela marche bien pour indiquer la ligne mais dans mon cas je n'en voie pas l'utilité puisque la fin de ma chaine n'est pas connue!
    je pense lire directement du fichire!

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    La longueur de la ligne est forcément connue puisque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int ligne = RichEdit1->CaretPos.y;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int longueur = RichEdit1->Lines->Strings[ligne].Length();
    A plus !

  5. #5
    Membre averti
    Inscrit en
    Décembre 2002
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 35
    Par défaut
    Bonjour,
    c'est ce que je cherchais, je test mais je pense que c'est la sollution. Merci

  6. #6
    Membre averti
    Inscrit en
    Décembre 2002
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 35
    Par défaut
    Bonjour j'utilise Borland C++ builder6

    voici la version brouillon du 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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    String chaine;
    int i,poS,Index,Indx; //Indx idexe dans Memo1 Index index dans RE1
    Index=0;  //i pour la boucle copie de carac et pos la fin de boucle
    Indx=0;
     
     
    while (UpperCase(RE1->Lines->Strings[Index])!="END") //condition d'arret
    {
    chaine=RE1->Lines->Strings[Index];    //chaine reçoit la ligne du RE
     
    if (chaine.Length()!=0)
    {  //si chaine vide on passe
    Edit1->Text="";Edit2->Text="";Edit3->Text=""; //RAZ
     
    poS=chaine.Pos(" "); //position de l'espace
    for (i=1;i<poS;i++)
    Edit1->Text=(Edit1->Text)+UpCase(chaine[i]); //instruction car par car
     
    i=poS+1;    //commence apres espace pour empiler l'opérande ou reg
    poS=chaine.Pos(","); //position de la virgule
    switch (poS) // existe t'il une autre opérande ?
    {
    case 0:
    {
    poS=chaine.Length();
    for (i;i<=poS;i++)
    Edit2->Text=(Edit2->Text)+UpCase(chaine[i]); //operande
    //afficher dans Memo instr op
    Memo1->Lines->Strings[Indx]="Opération : "+Edit1->Text;
    Indx=Indx+1;
    Memo1->Lines->Strings[Indx]="Opérande : "+Edit2->Text;
    Indx=Indx+1;
    Memo1->Lines->Strings[Indx]="";
    Indx=Indx+1;
    break;
    }
    default:
    {
    for (i;i<poS;i++)
    Edit2->Text=(Edit2->Text)+UpCase(chaine[i]); //operande 1 car par car
     
    i=poS+1; //commence apres ,
    poS=chaine.Length();
    for (i;i<=poS;i++)
    Edit3->Text=(Edit3->Text)+UpCase(chaine[i]); //operande 2
     
    //afficher dans Memo instr op1 et op2
    Memo1->Lines->Strings[Indx]="Opération : "+Edit1->Text;
    Indx=Indx+1;
    Memo1->Lines->Strings[Indx]="Opérande1 : "+Edit2->Text;
    Indx=Indx+1;
    Memo1->Lines->Strings[Indx]="Opérande2 : "+Edit3->Text;
    Indx=Indx+1;
    Memo1->Lines->Strings[Indx]="";
    Indx=Indx+1;
    break;
    }
     
    }
     
    }
    Index=Index+1; //incrementer Index
     
    }
    Merci A plus!

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

Discussions similaires

  1. comment indiquer dans DBGRID la ligne sélectionnée
    Par colorid dans le forum Langage
    Réponses: 6
    Dernier message: 18/05/2011, 14h00
  2. comment insérer l'index de ligne pour parcourir TTable
    Par tomy_libre dans le forum Débuter
    Réponses: 4
    Dernier message: 19/05/2009, 03h19
  3. Réponses: 2
    Dernier message: 10/03/2007, 17h40
  4. Réponses: 4
    Dernier message: 26/10/2006, 12h57
  5. automation excel : comment indiquer la feuille de travail ?
    Par mat_lefebvre dans le forum Access
    Réponses: 2
    Dernier message: 04/12/2003, 15h14

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