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

Langage Delphi Discussion :

La chaine t'es là ou t'es pas là ?


Sujet :

Langage Delphi

  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    août 2008
    Messages
    1 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : août 2008
    Messages : 1 597
    Points : 1 109
    Points
    1 109
    Par défaut La chaine t'es là ou t'es pas là ?
    Bonsoir à tous et à toutes

    Pour un souci de caractères, pas le mien lool j'suis un ange !!, je créé cette fonction des plus banales, le vrai but étant de gérer la création, démarrage etc... d'un service et de récupérer les erreurs :

    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
     
    Type
      TActionService= record
        ServiceName: String;
        DisplayName: String;
        State : TStartService;
        Description: String;
        LogFile: String;
        CarSource:String;
        CarCible :String;
    end;
     
      ActionService : TActionService;
     
    //
          ActionService.CarSource := ',…Š'; // etc...
          ActionService.CarCible  := 'éàè'; // etc..
    //...
     
    function TFInstService.ConvAscii(Chaine:String): String;
    var
      Index,i: Integer;
    begin
      Result := '';
      for i := 0 to Length(Chaine)-1 do
      begin
        Index := Pos(Chaine[i], ActionService.CarSource);
        if Index = 0
        then Result := Result + Chaine[i]
        else Result := Result + ActionService.CarCible[Index];
      end;
    //  if result = '' then result := Chaine;
    end;
    Utilisation

    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
    function TFInstService.ReturnAction:String;
    Var
      StatusAction : TStringList;
      i: Integer;
    begin
      Result := '';
      StatusAction := TStringList.Create;
      Try
        StatusAction.LoadFromFile(ActionService.LogFile);
        for i := 0 to StatusAction.Count-1 do
        begin
          if StatusAction[i] <> '' then
          begin
            Result := Result + ConvAscii(StatusAction[i]);
            voir(result);
          end;
        end;
      Finally
        if Assigned(StatusAction) then FreeAndNil(StatusAction);
      End;
    end;
    Cela me retourne systématique une chaine vide
    J'ai tenté avec Char dans la fonction ConvAscii function TFInstService.ConvAscii(Key:Char): String; cela ne change rien

    Genre de ligne envoyée dans le fichier log

    OpenService ‚chec(s) 1060
    Merci à vous.

  2. #2
    Membre expérimenté Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - développeur Delphi, PHP et JS
    Inscrit en
    juin 2013
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2013
    Messages : 752
    Points : 1 659
    Points
    1 659
    Par défaut
    Selon la version de Delphi et sa configuration, il est possible que l'index des chaînes commence à 0 ou à 1, y a peut-être de ça dans ton problème ?

    Essaie le helper charAt() plutôt que le tableau, comme ça ça commence forcément à 0.
    Idem pour pos() et les autres foncions historiques.

    d'ailleurs ce serait intéressant de savoir ce que donne l'index en débogage en ligne 27 de la fonction de conversion

  3. #3
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    août 2008
    Messages
    1 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : août 2008
    Messages : 1 597
    Points : 1 109
    Points
    1 109
    Par défaut
    Citation Envoyé par pprem Voir le message
    Selon la version de Delphi et sa configuration, il est possible que l'index des chaînes commence à 0 ou à 1, y a peut-être de ça dans ton problème ?

    Essaie le helper charAt() plutôt que le tableau, comme ça ça commence forcément à 0.
    Idem pour pos() et les autres foncions historiques.

    d'ailleurs ce serait intéressant de savoir ce que donne l'index en débogage en ligne 27 de la fonction de conversion
    Bonjour pprem,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Index := Pos(Chaine[i], ActionService.Origine,0);
        voir(Chaine[i] + ' - ' + inttostr(index));
        index := ActionService.Origine.IndexOf(Chaine[i], 0, 0);
        voir(Chaine[i] + ' - ' +inttostr(index));
    Effectivement l'index retourne toujours 0 (ou -1) mais quoiqu'il en soit la chaine devrait se concaténer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result := Result + Chaine[i];

  4. #4
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    août 2008
    Messages
    1 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : août 2008
    Messages : 1 597
    Points : 1 109
    Points
    1 109
    Par défaut
    Avec ceci l'index fonctionne.
    Par contre la chaine retournée s'arrête au caractère trouvé

    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
    Function CheckPhrase(Phrase: String): String;
    var
      Cc: String;
      i, index: Integer;
    begin
      Cc := '';
      for i := 0 to Phrase.Length-1 do
      begin
        Index := ActionService.Origine.IndexOf(Phrase.Chars[i]);
        if index > -1  then
          Cc := Cc + ActionService.Cible[Index]
        else
          Cc := Cc + Phrase.Chars[i];
      end;
      result := cc;
    end;

  5. #5
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    août 2008
    Messages
    1 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : août 2008
    Messages : 1 597
    Points : 1 109
    Points
    1 109
    Par défaut
    Merci pour ton aiguillage, cela fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function CheckPhrase(Phrase: String): String;
    var
      i, index: Integer;
    begin
      result := '';
      for i := 0 to Phrase.Length-1 do
      begin
        Index := ActionService.Origine.IndexOf(Phrase.Chars[i]);
        if index > -1  then
          result := result + ActionService.Cible.Chars[Index]
        else
          result := result + Phrase.Chars[i];
      end;
    end;

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    5 048
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 048
    Points : 11 015
    Points
    11 015
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    ... mais quoiqu'il en soit la chaine devrait se concaténer ?
    Elle l'est

    Il faut cependant se souvenir comment est structuré une UnicodeString.

    Le "caractère" 0 représente le mot de poids fort de la longueur et puisque ces chaînes sont courtes, tu insères un caractère #0 au début de la chaîne.
    Par la suite, les routines basées sur des chaînes à zéro terminal retournent une chaîne vide puisque ce qui est après #0 est ignoré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    s := #0'abc';
     
    ShowMessage(s.Length.ToString); // S fait 4 caractères ...
    ShowMessage(s);                 // ... mais semble vide

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    7 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 7 850
    Points : 25 837
    Points
    25 837
    Par défaut
    en fait tu essaies de faire quoi ? car les strings Delphi sont en Unicode, et les AnsiString ont une page de code...et Delphi se charge de convertir tout dans tous les sens.

    je suppose que ConvAscii a pour but de convertir une chaîne OEM en Ansi ?

    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
     
    type
      OEMString = type AnsiString(CP_OEMCP);
    var
      b: TBytes;
      o: OEMString;
      s: AnsiString;
    begin
      b := [$6f,$97,$20,$70,$61,$73,$73,$65,$72,$20,$6e,$6f,$89,$6c,$20,$3f];
      SetLength(o, Length(b));
      Move(b[0], o[1], Length(b));
     
      SetLength(s, Length(b));
      Move(b[0], s[1], Length(b));
     
      ShowMessage(string(o) + #13 + string(s)); // o est bon, s est mal affiché
     
      s := o; // Delphi se charge de tout
     
      ShowMessage(string(o) + #13 + string(s)); // les deux sont corrects
    end;
    NB: j'utilise un TBytes pour ne pas avoir à charger un fichier, mais le principe est simplement de mettre les caractères lus dans une chaîne OEM

    pour le ShowMessage j'utilise string() qui converti la chaîne en Unicode (16bits/caractères) car c'est ce qu'attends la fonction
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    5 048
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 048
    Points : 11 015
    Points
    11 015
    Par défaut
    Pour la lecture/écriture dans un fichier, il faudrait sans doute jouer sur TEncoding.

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    7 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 7 850
    Points : 25 837
    Points
    25 837
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Pour la lecture/écriture dans un fichier, il faudrait sans doute jouer sur TEncoding.
    oui il faudrait voir ce que donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       StatusAction.LoadFromFile(ActionService.LogFile, TEncoding.ASCII);
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    août 2008
    Messages
    1 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : août 2008
    Messages : 1 597
    Points : 1 109
    Points
    1 109
    Par défaut
    Bonsoir Messieurs

    C'est tordu en fait... Je vous explique, l'histoire de cette fonction. Près ? lol

    Via CMD je souhaite créer, supprimer, démarrer etc... un service ! (et pas autrement...hihi pour diverses raisons)

    Via cette commande (c'est un exemple tiré de mon application, mais il y a beaucoup plus de commande en un seul appel a CMD)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ShellExecute(0,nil,'cmd.exe',PWideChar('/C sc query ' + ActionService.ServiceName),nil,SW_HIDE);
    PS : cette commande ne nécessite pas de "runas"

    Le souci ici c'est que ShellExecute retourne toujours > 32, donc tout va bien ? mais que nenni !!
    Parceque la(les) commande(s) SC peut avoir échouée ou réussir et impossible de le savoir. (Même un GetLastError...)

    Alors j'ai choisi d'envoyer les informations dans un fichier log

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ShellExecute(0,nil,'cmd.exe',PWideChar('/C sc query ' + ActionService.ServiceName + ' > "'+ ActionService.LogFileA +'"'),nil,SW_HIDE);
    Et ç'est là qu'a ma grande surprise les valeurs retournées dans le fichier log sont merdiquos !!
    Genre :
    [SC] DeleteService r‚ussite(s)
    J'ai tenté de jouer avec chcp mais cela ne change rien quelque soit la page de codes utilisée !
    après avoir recherché comment avoir les accents j'ai laissé tombé ça ma pris la tête alors j'ai codé cette fonction.
    Evidement elle ne pourra pas être parfaite.

    En fait si tu tapes manuellement la commande dans le prompt la réponse est nickel, mais dés l'envoi en fichier sa capote.

    Voilà ce que je cherche a faire Paul

    Je l'ai testé ça aussi, je l'utilise sur d'autre projet, mais cela ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StatusAction.LoadFromFile(ActionService.LogFile, TEncoding.ASCII);
    AndNotOr
    J'ai pensé que ce problème était lié à un problème de 0 terminal de la chaine, c'est cela que tu évoques ?


    Avec ce que tu évoques Paul, peut-être via ChartoOem ?

  11. #11
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    7 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 7 850
    Points : 25 837
    Points
    25 837
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    Avec ce que tu évoques Paul, peut-être via ChartoOem ?
    OemToChar en réalité

    mais comme expliqué plus haut, tu peux déclarer une OEMString qui fera la conversion pour toi automatiquement. Pour avoir les codes de ma chaîne j'ai tapé en ligne de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo où passer noël en attendant l'été ? > test.txt
    puis j'ai affiché test.txt en hexa (sous XnView mais peu importe)

    et en fait tu peux faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      StringList.LoadFromFile('...', TEncoding.GetEncoding(CP_OEMCP));
    attention à la libération mémoire...il faut probablement libérer le TEncoding créé...donc l'instancier une fois au départ et le libérer à la fin
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  12. #12
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    août 2008
    Messages
    1 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : août 2008
    Messages : 1 597
    Points : 1 109
    Points
    1 109
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    et en fait tu peux faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      StringList.LoadFromFile('...', TEncoding.GetEncoding(CP_OEMCP));
    attention à la libération mémoire...il faut probablement libérer le TEncoding créé...donc l'instancier une fois au départ et le libérer à la fin
    Ca marche nickel !! t'es un AS

    Voilà ce que cela donne selon tes recommandations

    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
    Procedure TFInstService.InfoAction(FileLog: String);
    Var
      StatusAction : TStringList;
      Compteur, NumLigne, i : Integer;
      FEncoding : TUnicodeEncoding;
    Begin
      Compteur := High(LigneFileLogService)+1;
    //  Compteur := 0; SetLength(LigneFileLogService,compteur);
      NumLigne := 0;
      FEncoding := TUnicodeEncoding.Create;
      Try
        StatusAction := TStringList.Create;
        Try
          StatusAction.LoadFromFile(FileLog,FEncoding.GetEncoding(CP_OEMCP));
          if (StatusAction.Count > 0) then
          begin
            for i := 0 to StatusAction.Count-1 do
            begin
              if StatusAction[i] <> '' then
              begin
                inc(Compteur);SetLength(LigneFileLogService,compteur);
                inc(NumLigne);
                LigneFileLogService[Compteur-1].Lignetxt   := StatusAction.Strings[i];
                LigneFileLogService[Compteur-1].LigneNum := NumLigne;
                LigneFileLogService[Compteur-1].NumErr    := StrToIntDef(CheckErrService(StatusAction.Strings[i]),-1);
              end;
            end;
          end;
        Finally
          if Assigned(StatusAction) then FreeAndNil(StatusAction);
        End;
      Finally
        FEncoding.free;
      End;
    End;
    Résolue #2 !!

  13. #13
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    5 048
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 048
    Points : 11 015
    Points
    11 015
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    Via CMD je souhaite créer, supprimer, démarrer etc... un service !
    ...
    PS : cette commande ne nécessite pas de "runas"
    J'ai bien peur que si à moins de modifier les descripteurs de sécurité du service.

  14. #14
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    7 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 7 850
    Points : 25 837
    Points
    25 837
    Par défaut
    ça devrait plutôt être

    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
     
    Procedure TFInstService.InfoAction(FileLog: String);
    Var
      StatusAction : TStringList;
      Compteur, NumLigne, i : Integer;
      FEncoding : TEncoding;
    Begin
      Compteur := High(LigneFileLogService)+1;
    //  Compteur := 0; SetLength(LigneFileLogService,compteur);
      NumLigne := 0;
      FEncoding := TEncoding.GetEncoding(CP_OEMCP); // la fonction renvoie une nouvelle instance
      Try
        StatusAction := TStringList.Create;
        Try
          StatusAction.LoadFromFile(FileLog,FEncoding);
          if (StatusAction.Count > 0) then
          begin
            for i := 0 to StatusAction.Count-1 do
            begin
              if StatusAction[i] <> '' then
              begin
                inc(Compteur);SetLength(LigneFileLogService,compteur);
                inc(NumLigne);
                LigneFileLogService[Compteur-1].Lignetxt   := StatusAction.Strings[i];
                LigneFileLogService[Compteur-1].LigneNum := NumLigne;
                LigneFileLogService[Compteur-1].NumErr    := StrToIntDef(CheckErrService(StatusAction.Strings[i]),-1);
              end;
            end;
          end;
        Finally
          if Assigned(StatusAction) then FreeAndNil(StatusAction);
        End;
      Finally
        FEncoding.free;
      End;
    End;
    et si tu fais ça régulièrement tu peux mettre FEncoding au niveau de la fiche, le créer dans OnCreate et le libérer dans OnDestroy

    NB: je sais que tu bosses sous Windows, mais je précise que cela peut ne pas fonctionner sous d'autres OS.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  15. #15
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    août 2008
    Messages
    1 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : août 2008
    Messages : 1 597
    Points : 1 109
    Points
    1 109
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    ça devrait plutôt être

    et si tu fais ça régulièrement tu peux mettre FEncoding au niveau de la fiche, le créer dans OnCreate et le libérer dans OnDestroy

    NB: je sais que tu bosses sous Windows, mais je précise que cela peut ne pas fonctionner sous d'autres OS.
    Ok pas de souci, je voyais pas cela comme çà, merci


    Citation Envoyé par Andnotor Voir le message
    J'ai bien peur que si à moins de modifier les descripteurs de sécurité du service.
    Coucou AndNotor je ne parlais que pour cette attribut query et autre qxxxx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ShellExecute(0,nil,'cmd.exe',PWideChar('/C sc query ' + ActionService.ServiceName + ' > "'+ ActionService.LogFileA +'"'),nil,SW_HIDE);
    Toutes les autres nécessite runas je confirmes ; create, delete, config et.. sous peine d'erreur 5


    Merci encore.

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

Discussions similaires

  1. [XL-2002] Rechercher dans une chaine si 1 car ne se trouve pas dedans.
    Par cmako dans le forum Excel
    Réponses: 4
    Dernier message: 26/11/2009, 14h39
  2. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 21h25
  3. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 11h08
  4. Réponses: 3
    Dernier message: 12/06/2002, 22h15
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 20h01

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