begin process at 2012 02 11 03:02:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Divers

 > 

Débutant(e)

 > 

Tableau dynamique


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Tableau dynamique

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 Administrateur CodeS-SourceS
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 Administrateur CodeS-SourceS

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 Administrateur CodeS-SourceS

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ée 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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,654 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales