Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Modifier valeur TStringList [ Divers / Débutant(e) ] (Sat83)

jeudi 29 mars 2007 à 17:24:49 | Modifier valeur TStringList

Sat83

Bonjour!

Je voudrais modifié une valeur dans une TStringList.

J'ai donc créer la méthode:

var myList : TstringList;
[...]

procedure TMyObjet.changeValue(const index:word; const str : String);
begin
  if (
index<=myList.Count)) then begin
   
myList.Delete(index);
   
myList.Insert(index,str);
  end;
end;


A prioris ça semble marché correctement (j'ajoute aussi que la TStringList n'est pas triée), mais je souhaiterais savoir si il y a une autre solution, ou si celle-çi vous semble correcte...

Merci de votre avis..



jeudi 29 mars 2007 à 17:54:19 | Re : Modifier valeur TStringList

Loulibier

Membre Club
Réponse acceptée !
Bonjour Sat83,

voici une autre solution qui semble être plus simple :

procedure TMyObjet.changeValue(const index:word; const str : String);
begin
  if (index < myList
.Count) then 
    myList[index] := str;

end;

Cette méthode t'évite de supprimer ton enregistrement et d'en rajouter un nouveau.

Bonne Prog,  Olivier
PS : Lorsqu'une réponse vous convient, n'oubliez pas de la valider.

jeudi 29 mars 2007 à 18:53:57 | Re : Modifier valeur TStringList

WhiteHippo

Membre Club
Réponse acceptée !

Bonsoir
Juste histoire d'être puriste  et surtout de mettre mon grain de sel , une vérification de l'existence de MyList ainsi qu'un index du type Integer serait plus adéquate. De plus, il n'est pas nécessaire de vérifier l'index, cela est fait dans la classe de base. Un bloc try..except suffit à intercepter l'éventuelle erreur.

procedure TMyObjet.changeValue(const index:Integer; const str : String);
begin
 
if ( myList<>NIL ) then
  try
    myList[index] := str;
  except
    // traitement ici en cas d'erreur
    // exemple :
    On E:Exception do
      ShowMessage( E.Message ) ;
  end ;
end;

Cordialement.


"L'imagination est plus importante que le savoir." Albert Einstein

vendredi 30 mars 2007 à 07:46:49 | Re : Modifier valeur TStringList

f0xi

Membre Club Administrateur CodeS-SourceS

tout simplement :


procedure TMyObjet.changeValue(const index : integer; const str : String);
begin
  MyList[index] := str
end;

ou

procedure TMyObjet.changeValue(const index : integer; const str : String);
begin
  if MyList[index] <> str then
    MyList[index] := str
end;

ou

procedure TMyObjet.changeValue(const index : integer; const str : String);
begin
  if index < MyList.Count then
  { if (index < MyList.Count) or (MyList.Count = 0) then }
     MyList[index] := str
  else
     MyList.Add(Str);
end;

ensuite l'objet MyList doit appartenir a l'objet MyObject ... un objet ne doit en aucun cas (du moins la plupart du temps et dans les cas generaux) faire appel a un objet externe si ce dernier n'est pas utilisé ailleur.

TMyObjet = class({ancetre})
private
  fMyList : TStrings;
  fOnChange : TNotifyEvent;
  procedure SetMyList(val : TStrings);
protected
  procedure Change; virtual;
public
  constructor Create; {override;}
  destructor Destroy; {override;}
  property fMyList : TStrings read fMyList write SetMyList;
  property OnChange :  TnotifyEvent read fOnChange write fOnChange;
end;

constructor TMyObject.Create;
begin
  inherited Create;
  fMyList := TStringList.Create;
end;

destructor TMyObject.Destroy;
begin
  fMyList.Free;
  inherited Destroy;
end;

procedure TMyObject.Change;
begin
  if Assigned(fOnChange) then
     fOnChange(Self);
end;

procedure TMyObject.SetMyList(val : TStrings);
begin
  fMyList.Assign(val);
  Change;
end;


aussi, c'est une erreur de mettre des parentheses dans un if quand il n'y a qu'une seule condition :

correct :

if truc <= machin then
if truc in machin then
if truc then
if not truc then
if not (truc in machin) then
if not (truc = machin) then
if (X mod 2) = 0 then
if not ((X mod 2) = 0) then
if (truc <= machin) or (truc => machin) then
if (truc = machin) and (machin <> bidule) then
if CheckBox1.Checked and CheckBox2.Checked and CheckBox3.Checked then


incorrect :

if (truc <= machin) then
if
(truc in machin) then
if
(not truc) then
if
((truc = machin) and (machin <> bidule)) then


because Delphi is not C++

et il en vas de meme pour while ou repeat ...


Croc (click me)

vendredi 30 mars 2007 à 09:16:03 | Re : Modifier valeur TStringList

WhiteHippo

Membre Club

Hello foxi,

"aussi, c'est une erreur de mettre des parentheses dans un if quand il n'y a qu'une seule condition" [...] "because Delphi is not C++"???

Je vois pas en quoi c'est une erreur et surtout en quoi sa se rapproche du C++ ?

 Tout d'abord, le compilateur l'accepte de par sa grammaire formelle :

InstructionIf -> IF Expression THEN Instruction [ELSE Instruction]
Expression -> ExpressionSimple [OpRel ExpressionSimple]...
ExpressionSimple -> ['+' | '-'] Terme [OpAdd Terme]...
Terme -> Facteur [OpMul Facteur]...
Facteur -> Désignateur ['(' ListeExpr ')']
       ->
'@' Désignateur
       -> Nombre
       -> Chaîne
       -> NIL
       -> '(' Expression ')'
       -> NOT Facteur
       -> ConstructeurEnsemble
       -> IdentType '(' Expression ')'

Ensuite, d'un point de vue logique si l'on met des parenthèses avec des conditions multiples, il est normal d'en mettre également dans une condition simple.

En résumé :
  Ce n'est pas une erreur !

P.S. Pour le repeat et le while, c'est idem.

Cordialement.


"L'imagination est plus importante que le savoir." Albert Einstein


vendredi 30 mars 2007 à 15:53:31 | Re : Modifier valeur TStringList

florenth

Membre Club
Ce n'est pas une erreur, c'est juste inutile. Tout comme écrire : var Bool: Boolean; begin if (Bool = True) then begin DoSomething(); end; end; car : - "if Bool = True" => "if Bool". - Pas besoin de parenthèses autour. - begin..end inutile si une seule ligne. - parenthèses à la procédure inutiles si pas de paramètres. En gros, en allégé, ça donne ça: var Bool: Boolean; begin if Bool then DoSomething; end; C'est quand même plus clair qu'avant. Et encore, j'ai pas fait le coup de l'indentation foireuse où on saute 2 lignes entre le then et le begin ... Ce ne sont que des détails, mais je pense que bien coder, c'est surtout et avant tout bien écrire. Un code fonctionnel ne suffit pas: il faut qu'il soit maintenable. Donc il fait qu'il soit lisible. Donc il faut que le gars qui code écrive bien. Donc il faut un minimum de respect quand aux nomenclatures. Voila.

vendredi 30 mars 2007 à 16:32:25 | Re : Modifier valeur TStringList

WhiteHippo

Membre Club
"Un code fonctionnel ne suffit pas: il faut qu'il soit maintenable."

Entièrement d'accord , cependant lequel de ces deux codes :

// Code 1
var
  Bool : Boolean ;
begin
  if Bool then
    DoSomething ;
end;
 
// Code 2
var
  Bool : Boolean ;
begin
  if ( Bool ) then
  begin
    DoSomething ;
  end ;
end ;

est le plus facile à maintenir si tu as :
  - une condition à ajouter à ton if : Exemple ( a and (b+c))
  - plusieurs actions à effectuer dans ton if : Exemple, DoSomething1 et DoSomething2  

Sans hésitation, c'est le code 2.

"- "if Bool = True" => "if Bool".
- Pas besoin de parenthèses autour.
- begin..end inutile si une seule ligne.
- parenthèses à la procédure inutiles si pas de paramètres."

Dans tous ces cas, c'est avoir une vision à court terme que de ne pas mettre des parenthèses et/ou des begin..end, et donc c'est de ne pas envisager d'éventuelles futures modifications.

"Donc il fait qu'il soit lisible."
Les parenthèses, les begin..end ne gènent en rien la lisibilité, bien au contraire.

"Donc il faut un minimum de respect quand aux nomenclatures."
Je suppose que c'est aux normes que tu faisais allusions.

Cordialement.

"L'imagination est plus importante que le savoir." Albert Einstein

vendredi 30 mars 2007 à 16:51:46 | Re : Modifier valeur TStringList

florenth

Membre Club
On ne doit pas avoir la même version du mot "lisible" (le code 2 est bien trop lourd à mon goût, pour le peu qu'il fait ...) mais bon, chacun fait comme il le sent après tout... Pour "norme" vs. "nomenclature" tu a tout à fait raison. Remarque, ça me permet de dire qu'utiliser une nomenclature stricte pour les noms de variables, etc améliore grandement la lisibilité.

mercredi 26 septembre 2007 à 16:05:44 | Re : Modifier valeur TStringList

mounjetado

pour ma part, je pense que vous vous prenez la tête sur des histoires de sémiologie, pourdéfendre vos points de vue respectifs (ce que je comprends tout à fait) mais...
en définitive, ça dépend du degré de complexité du code à produire, non?
enfin, je peux me tromper et je ne veux pas donner des leçons à des personnes certainement beaucoup plus efficaces que moi en matière de programmation...
sur ce, je retourne dans les entrailles de mon système... si on me demande, dites que nous ne m'avez pas vu, ok? lol
mes salutations admiratives à vous tous!


si Delphi m'était conté...



Cette discussion est classé dans : valeur, modifier, index, tstringlist, mylist


Répondre à ce message

Sujets en rapport avec ce message

TDBLookUpCombobox [ par sosososo ] Bonjour,J'utilise TDBLookUpComboBox qui charge des valeurs à partir de la base. ex: aaaa, bbbb, cccc, dddd.Enfait, je veux que mon TDBLookUpCombobox a Ecrire/modifier la valeur '(défaut)' d'une clé de registre [ par mikesvl ] Pour ce qui est de la lecture et de l'écriture de clés et/ou de valeurs dans le registre : pas de problème. Mais en ce qui concerne la valeur '(défaut Modifier la valeur des enregistrements d'un champ dans une table [ par DGPat ] Bonjour, J'ai une table paradox qui reprend les informations salariés,et par exemple lors d'une augmentation de salaire (il est interdit de rire,les Configuration BDE [ par simonpelloquin ] Bonjour, Je voudrais savoir s'il existe un moyen de modifier une propriété du BDE par delphi... Pour être plus clair : Session.GetConfigParams('DRIVE Modifier la valeur d'un pixel dans une image au formta FITS [ par faymarcel ] Bonjour à tous,But : application en Imagerie astronomiqueComment s'y prendre pour changer la (les) valeur(s) numérique de pixel(s) à l'adresse x,y, da fichier texte [ par sraverdy ] Bonjour je désire récupérer le valeur entre le caractére 59 et 63 soit '418' dans un fichier texte ,donc une  partie de la chaine suivante :22/07/2006 affecter une valeur par defaut a un dblookupcombobox [ par kadje84 ] Salut a tous , j'aimerai avoir une astuce pour affecter une valeur par defaut d'un champ de ma table a un dblookupcombobox.et si possible effacer le Réindexer une table Paradox [ par sraverdy ] Bonjour ,j'ai des problémes souvent avec mes base de données Paradox à cause des "Index" , j'ai lu sur un forum qu'on pouvez regénérer des Index afin Juste pour un affichage peu particulier sur mon Etat d'impression. [ par jennybless ] Salut ! J’ai un petit problème de logique. Pouvez-vous m’aider en lisant d’abord mes codes: J’ai trois champs : CODE, A, B J’aimerai qu’à chaque foi Comment modifier la palette d'un Bitmap 256 couleurs ? [ par Toya78 ] Bonjour,Je cherche à modifier une couleur d'un TBitmap 256 couleurs en intervenant directement sur sa palette (je cherche à modifier le blanc en rouge


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,435 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.