Tableau dynamique et depassement de capacité ??? [Résolu]

elguevel 735 Messages postés jeudi 19 décembre 2002Date d'inscription 22 novembre 2016 Dernière intervention - 8 juil. 2005 à 14:34 - Dernière réponse : elguevel 735 Messages postés jeudi 19 décembre 2002Date d'inscription 22 novembre 2016 Dernière intervention
- 11 juil. 2005 à 10:51
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 là c'est un porc" , mais bon ...).

Le problème est le suivant, si je declare un tableau dynamique, et ensuite je lui donne une taille definitive avec SetLength, et je travail après avec (je le rempli avec mes nom de fichier), aucun problemes, mais voila le nombre de fichier n'est pas une valeur constante.

<HR>
Donc en static (comme un gros porc çà marche ..)

type FichierData = record <= donc un pt'it record pour mes fichiers :)
idx : LongWord;
nom : string;
dossier : string;
date : integer;
taille : integer;
end;

StructureFichier : Array [0..10000] of FichierData;

<HR>

Donc j'me suis dit j'vais crée un tableau dynamique qui va grossir en fonction du nombre de fichiers, donc au fur et a mesure que je trouve un fichier, j'incremente mon tableau d'un champs et je rempli le champs. Ca marche mais la problème .. la memoire explose, çà depasse les 300 Mo et çà fini par planté [Evidemment ]


<HR>

En dynamique (çà bouffe des ressources a mort...)

StructureFichier : Array of FichierData;

For ..etc.. do begin
... etc..
SetLength( StructureFichier, Length(StructureFichier) +1 );
StructureFichier[High(StructureFichier)].nom := hFind.Name; <= mon fichier trouver
..Etc...
End;

<HR>

Donc ma question ( ' enfin ' ) ..
Sans réalloué la memoire je ne dépasse pas les 10 Mo, donc c pas un problème de contenu, donc comment réalloué un tableau dynamique (fréquement) et le remplir sans que çà me bouffe toute mes ressources et que çà mette 3 ans ?

Putain j'ai commencer avec "je vais etre bref" mais en faite j'ai été pompeux , mais bon qi qqn pourrai m'aidé je trouve d'aide nul par a ce sujet, et j'ai une appli a finir rapidement et çà me gave .

Merci d'avance a la communauté
-ElGuevel-
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 8 juil. 2005 à 15:59
3
Merci
salut,

as-tu essayé d'utiliser une liste chainee?

je m'explique:

tu declare un pointeur

type:

PFichierData = ^FichierData

tu declare ton fichier data



type FichierData = record <= donc un pt'it record pour mes fichiers :)

idx : LongWord;

nom : string;

dossier : string;

date : integer;

taille : integer;

suivant:PFichierData ;

end ;

puis une variable

var

pointcourant::PFichierData =nil;

StructureFichier :PFichierData = nil;

au debut tu intialises ta liste:



new (StructureFichier );

//creation du point d'entree

StructureFichier .suivant =nil; //non indispensemble mais utile pour connaitre la fin de la liste;

pointcourant:= StructureFichier ; //pour acceder

ensuite chaque fois que tu ajoutes un fichier tu fais

new(pointcourant^.suivant); // attribue l'espace memoire pour nouvelle entree

pointcourant: =pointcourant^.suivant; //pour acceder

with pointcourant^ do

begin

suivant: =nil; //comme precedemment

.

.

end;

c'est une autre façon de proceder qui permet de faire varier la taille dynamiquement d'une structure

pour liberer la memoire tu utilise dispose pour chaque point d'entree



bonne prog

Merci jlen100 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 121 internautes ce mois-ci

Commenter la réponse de jlen100
Meilleure réponse
roud59 103 Messages postés jeudi 16 septembre 2004Date d'inscription 26 juillet 2007 Dernière intervention - 8 juil. 2005 à 17:32
3
Merci
Tu peux utiliser aussi TList qui est une liste de pointeurs vers ce que tu veux et tu peux accéder aux éléments comme pour un tableau.

Roud59

Merci roud59 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 121 internautes ce mois-ci

Commenter la réponse de roud59
elguevel 735 Messages postés jeudi 19 décembre 2002Date d'inscription 22 novembre 2016 Dernière intervention - 8 juil. 2005 à 17:06
0
Merci
Merci beaucoup jlen100,

je n'ai pas encore tester ta solution mais je vais potassé tout çà de plus près çà l'air très interessant :)

J'te ferai savoir plus tard si çà à marché ou pas.

Allé au boulot ...
Commenter la réponse de elguevel
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 8 juil. 2005 à 17:44
0
Merci
exact round59 je n'avais pas penser à Tlist qui est est plus faclie de manipulation.
Commenter la réponse de jlen100
elguevel 735 Messages postés jeudi 19 décembre 2002Date d'inscription 22 novembre 2016 Dernière intervention - 11 juil. 2005 à 10:51
0
Merci
Merci à TOUS !

Après avoir galéré avec les listes chainées, j'ai fait comme la conseillé "roud59", j'ai utilisé une Tlist.. et çà déchire !

Très simple d'utilisation, je liste mes fichiers et je les memorises dans la 'Tlist' à une vitesse impressionante ( 50000 fichiers en 2s environ )

Ensuite je recherche les doublons dans cette liste, c'est bcp plus long, mais c'est une autre histoire.. en tout cas çà marche nikel !

Merci encore...
Commenter la réponse de elguevel

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.