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 : Tableau dynamique [ Divers / Débutant(e) ] (RideIsLife)

mardi 1 juillet 2008 à 09:48:18 | Tableau dynamique

RideIsLife

Bonjour,
J'ai une petite question à poser à propos des tableaux dynamiques, je n'ai rien trouvé qui pouvait m'aider sur le forum.
J'ai développé un serveur UDP qui stocke dans un tableau dynamique les nom, adresse IP et numéro de port de chaque client qui se connecte au serveur. Ce que je veux faire en fait, c'est supprimer de mon tableau dynamique les coordonnées complètes de mon client si celui ci ne me donne pas de signe de vie au bout d'un certain temps. Le seul problème est que je ne sais pas comment supprimer en l'occurence 3 cases de mon tableau dynamique, celles ci pouvant se trouver n'importe où dans le tableau. Je suis débutant en delphi, je pensais pouvoir utiliser la fonction Free, mais celle ci ne fonctionne qu'avec des TObject, ce qui n'est pas le type de mon tableau de string. Il y a t il un moyen simple de libérer la mémoire et donc des cases de mon tableau ? Ou faut il créer une procédure, si oui en utilisant quelle genre de fonction ?
Voilà je ne sais pas si quelqu'un a déjà été confronté au problème.
D'avance merci.


mardi 1 juillet 2008 à 10:17:34 | Re : Tableau dynamique

cantador

Membre Club
Bonjour,

Pourquoi ne pas créer une p'tit table avec des champs, stocker les données et ensuite faire une p'tit recherche sur la table afin de repérer l'enregistrement à supprimer.
non ?
un tableau de string pour gérer ce truc là je le sens pas bien..

cantador

mardi 1 juillet 2008 à 10:27:53 | Re : Tableau dynamique

RideIsLife

Salut,
Merci pour ta réponse. En fait il était question que j'utilise effectivement une base de données au départ. Mais quand j'ai proposé cette solution à la personne pour laquelle je travaille, cela a été refusé car à priori trop long l'accès en mémoire si le fichier de la base de données est écrit en dur. C'est à ce genre de table que tu faisais référence ? Ou existe t il un autre type de "table", non nécessairement écrite dans un fichier, plus pratique d'utilisation qu'un tableau ?
Merci.

mardi 1 juillet 2008 à 12:13:32 | Re : Tableau dynamique

cantador

Membre Club

car à priori trop long l'accès en mémoire

oui, le temps devient un souci au delà d'un grand nombre de données dans une table..(d'autres facteurs interviennent également) mais dans ton cas, tu supprimes l'enregistrement dans un  temps relativement cours (absence de signe de vie..) qu'on peut estimer à 3 mois environ..

en 3 mois, tu n'auras pas énormément de données..et donc le traitement sera rapide.

et puis il te faut bien assurer aussi la persistance de l'information.
le stockage ?
tu peux stocker dans un fichier texte
(record, txt, ini, csv..etc) + difficile à gérer
Moi je prendrai une table car en général il y a toujours une suite à ce genre d'exercice qui va entraîner d'autres problèmes.

cantador


mardi 1 juillet 2008 à 12:16:17 | Re : Tableau dynamique

fbalien

Membre Club
Bonjour

faut chercher l'index de ta case à supprimer
décaler tous les autres enregistrement a partir de cette index
index +1 va donc écraser index; index +2 va écraser index +1 etc
puis redimensionnement du tableau à -1

voila pour le principe

mardi 1 juillet 2008 à 12:17:40 | Re : Tableau dynamique

florenth

Membre Club
Salut,
Le plus simple, s'il s'agit d'une liste de chaînes, c'est d'utiliser un TStringList (cf Google si tu ne connais pas) car il possède une méthode Delete(index) qui supprime la index-ième chaîne.

Sinon, si ce n'est pas que des chaînes, le mieux est de passer par une liste chaînée (Google là aussi, le web en regorge)

Sinon encore, tu peux tout simplement déplacer toutes les cases de ton tableau qui suivent celle que tu veux enlever d'un rang en arrière.
Comme ceci :

procedure DeleteFromTab(Index: Integer; var Tab: array of TBidule); // TBidule à remplacer par ton type à toi
begin
  while Index < High(Tab) do
  begin
    Tab[Index] := Tab[Index + 1];
    Inc(Index);
  end;
  SetLength(Tab, Length(Tab) - 1);
end;

mais c'est la méthode la plus lente. (la plus simple aussi)

Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]

mardi 1 juillet 2008 à 12:18:57 | Re : Tableau dynamique

florenth

Membre Club
Ah, on s'est croisés fablien !

Sinon, pour qu'on t'aide un peu plus précisément, il faudrait voir au moins le code de déclaration du tableau, pour voir sa structure.

mardi 1 juillet 2008 à 12:30:46 | Re : Tableau dynamique

Guillemouze

voici un petit prototype de fonction que j'ai fait pour manipuler les tableaux. Tu as juste a remplacer X par ton type et ca devrait marcher. C'est la meme que celle de florenth, mais légèrement plus efficace je pense.

function ArrayRemove(var AArray: T<X>DynArray; Index: integer): <X>;
var
  L: integer;
begin
  L := Length(AArray);
  if (Index >= L) or (Index < 0) then
    raise EArrayError.CreateFmt(SArrayIndexError, [Index])
  else
  begin
    Result := AArray[Index];
    MoveMemory(@AArray[Index], @AArray[Index+1], (L - Index - 1) * SizeOf(<X>));
    SetLength(AArray, L-1);
  end;
end;

mardi 1 juillet 2008 à 12:51:03 | Re : Tableau dynamique

florenth

Membre Club
En effet, MoveMemory() est un peu plus rapide que déplacer les éléments un par un.
Mais, dans tous les cas, l'utilisation d'un tableau n'est ni recommandable, ni recommandé.

Franchement, une liste chaînée est bien plus rapide. Surtout si tu veux supprimer le troisième élément d'un tableau qui en contient 1000.

Après, une table de bdd peut s'avérer utile si le projet devient "gros" et s'il y a besoin de persistence.
Mais entre un tableau et une table, même si les mots diffèrent de deux lettres, il y a tout un monde !


Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]

mardi 1 juillet 2008 à 14:03:54 | Re : Tableau dynamique

cantador

Membre Club

J'ai développé un serveur UDP qui stocke dans un tableau dynamique les nom, adresse IP et numéro de port de chaque client qui se connecte au serveur.

et si le serveur est arrêté pour maintenance ?
que deviennent les données ?

cantador



1 2

Cette discussion est classé dans : dynamique, serveur, tableau, supprimer, client


Répondre à ce message

Sujets en rapport avec ce message

suppression dynamique [ par seeev ] Bonjour, j'ai un probleme dont je n'arrive pas à me sortir.je stoque des TSpeedButton dans un tableau de manière à pouvoir les créer, les afficher et supprimer tableau dynamique multidimensionnel [ par richarddum ] Salut, Est-il possible de supprimer un tableau dynamique ?  tableau : array of array [0..1] of string; affectation par la commande setlength(tablea Tableau dynamique et depassement de capacité ??? [ par elguevel ] Voila pour être bref, j'utilise une fonction recursive qui va charger tout les fichiers de mon disque dans un Tableau. (déja vous vous dite.. "ce mec envoyer un OleVariant par socket [ par Rems ] Bonsoir à tous..j'ai besoin d'aide car je n'arrive pas passer un OleVariant (ClientDataSet.Data)  du client au serveur et vice versa utilisant les soc TIdTCPServer indy 9 [ par templeofboom ] Bonjour dans le cadre du dev d'une petite appli client server je voudrai pouvoir activer mon serveur puis, pouvoir le désactiver et le relancer sur u supprimer un item dans un array [ par natsou_k ] Salut a tous, j ai un petit probleme.Connaissez vous une procédure qui supprime un item d un tableau svp?j'ai celle-ci mais j'ai des ennui lorsque l'i comment créé une com. entre serveur/client avec indy [ par bisousnours13 ] venez a mon aidecomment je dois my prendre pour créé un serveur/client tcp avec les composent indyidTCPclient  et   idTCPservermerci pb client/serveur + proxy [ par templeofboom ] Bonjour, voila dans le cadre du developpement d'une appli client serveur je suis ammené a devoir développer un client pouvant se connecter a une machi Chat Client/serveur avec Compoisants Indy [ par leobaillard ] Bonjour, je suis assez novice en delphi et je fais un chat avec les indy en delphi 7. Mais il y a un problème. Je n'arrive pas à récupérer (dans un mé tableau dynamique à deux dimensions dans une classe [ par Koraluv ] Salut à tous!Je suis débutante en delphi et je voudrai créer une classe qui ai comme attribut un tableau dynamique à deux dimentions de TCellule.je l'


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 : 0,296 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é.