Comment dois-je déclarer un tableau quand je ne sais pas la longueur jusqu'à l'exécution?
J'ai d'abord eu un array[1..1000] qui a été défini comme une variable globale.
Mais maintenant, j'ai besoin de ça pour être n, pas 1000 et je n'ai pas trouver n jusqu'à ce que plus tard.
Je sais que ce n est avant de me remplir le tableau mais j'ai besoin d'elle pour être global donc besoin d'un moyen de définir la taille d'un tableau global au moment de l'exécution.
Contexte est le remplissage d'un tableau avec une transformation linéaire des octets dans un fichier.
Je ne sais pas comment big le fichier est jusqu'à ce que quelqu'un veut l'ouvrir, et les fichiers peuvent être de toute taille.
- et quelle langue exactement est-ce?
- L' [lobound..hibound] construire pour la définition des tableaux, couplé avec des tableaux globaux et e/s de fichier ne laisse que Pascal et Ada dans la compétition, donc les paris aurait été sur Delphi 🙂 Rob utilisé après votre commentaire, cependant.
Vous devez vous connecter pour publier un commentaire.
De Delphi 4, Delphi supporte tableaux dynamiques. Vous pouvez modifier leur taille au moment de l'exécution et conservent les données que vous avez stockées dans d'autres éléments à l'ancienne taille. Ils peuvent contenir des éléments de tout homogène de type, y compris des enregistrements et des autres tableaux. Vous pouvez déclarer un tableau dynamique est la même que pour déclarer la normale, "statique" des tableaux, mais tout simplement omettre les limites du tableau:
Bien que les tableaux statiques, vous permettent de spécifier à la fois la partie inférieure et la limite supérieure, le faible indice d'un tableau dynamique est toujours à zéro. L'indice élevé est donné par la
High
fonction, qui renvoie toujours un de moins que la longueur du tableau. Pour n'importe quel tableau dynamiquex
,High(x) = Length(x)-1
.Une variable globale peut être consulté par n'importe quel code, y compris les procédures locales.
Une variable globale de la dynamique-type du tableau sera initialisé à une vide tableau. Sa longueur doit être égale à zéro et
High
appelé sur ce tableau sera -1.Low
sur ce tableau renvoie toujours zéro.À tout moment, vous pouvez redimensionner un tableau dynamique. Utiliser le
SetLength
fonction, tout comme vous vous pouvez le faire avec des cordes:Si vous avez un tableau multidimensionnel, vous pouvez définir leurs longueurs dans une boucle:
Il y a un raccourci pour que pour définir la longueur de tout l'intérieur de tableaux à la fois:
Comme je l'ai mentionné, les tableaux dynamiques garder leurs anciennes valeurs lors d'un redimensionnement:
Mais si vous raccourcir le tableau, tous les éléments qui se trouvaient au-delà de la nouvelle et dernière élément ont disparu à jamais:
Mes démonstrations ci-dessus utilisé des chaînes de caractères. Les chaînes sont spéciaux à Delphes; elles sont gérées par le compilateur par le nombre de références. En raison de cette, nouvelle dynamique de tableau d'éléments de type string sont initialisées à être vide. Mais si j'avais utilisé des entiers au lieu de cela, il n'y aurait pas de garantie de valeurs d'éléments nouveaux. Ils pourraient être de zéro, mais ils pourraient être n'importe quoi d'autre, trop, tout comme les valeurs initiales autonome de variables locales.
Delphi 7 fichiers d'aide sont très bonnes, je me suis dit. Veuillez en lire plus sur tableaux dynamiques là. Vous pouvez trouver des démonstrations de leur utilisation tout au long de la VCL et RTL code source fourni dans votre installation de Delphi, ainsi que dans presque tout le code Delphi exemple produit dans les 10 dernières années.
D'abord, voici une manière générale, la réponse à la première partie de votre question:
Si votre tableau est plus statique, vous pouvez envisager d'utiliser une TList, un TStringList ou l'une des nombreuses classes de conteneurs dans le Contnrs unité.
Ils peuvent mieux représenter ce que vous faites, de fournir des capacités supplémentaires que vous pourriez avoir besoin, par exemple, de tri ou de paires nom/valeur, ils développer dynamiquement comme vous en avez besoin, et ont été très bien optimisé.
Puis vous avez dit:
Pour votre problème spécifique, je voudrais charger les octets dans un fichier à l'aide de:
Ensuite, vous pouvez facilement utiliser un PChar pointeur d'aller à travers chaque personnage ou même chaque octet dans le Buffer, un par un et de les transformer la façon dont vous avez besoin.