Bonjour
Pour réaliser une structure, j’ai besoin de déclarer des « string » de longueur définie.
Je ne l’ai pas trouvé dans l’aide sur les structures.
Quelqu’un peut-il me dire comment les déclarer ?
Merci de votre aide
Claude Azoulai
Bonjour
Pour réaliser une structure, j’ai besoin de déclarer des « string » de longueur définie.
Je ne l’ai pas trouvé dans l’aide sur les structures.
Quelqu’un peut-il me dire comment les déclarer ?
Merci de votre aide
Claude Azoulai
Le concept de taille de string a disparu dans .NET.
Il faut passer par un StringBuilder pour retrouver ce comportement :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 var sb = new StringBuilder(10); sb.Append("0123456789");
Si on rajoute des données après le 9 (donc si le string dépasse la longeur), je vais déclencher une exception.
Il existe cependant une subtilité, qui consiste à utiliser l'attribut VBFixedStringAttribute, mais cela oblige à rajouter une référence à Microsoft.VisualBasic.
Enfin, il est possible de passer par une propriété de type String, qui vérifie la longeur du string dans le setter. Si c'est trop long, on peut ensuite à loisir, tronquer ou lancer une exception.
Less Is More
Pensez à utiliser les boutons , et les balises code
Desole pour l'absence d'accents, clavier US oblige
Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.
Hello,
Hein ? Les string ont une taille. Que veux-tu dire ?
Non. Le constructeur de StringBuilder qui prend un int en paramètre ne fait que spécifier la taille initiale du buffer, pas la taille maximale (cf la doc)
Claude: quel est ton besoin ? Veux tu faire de la validation, pour t'assurer que tel propriété de tel object est une string d'une taille donnée ? Ou veux tu exporter ces string quelque part, dans un fichier ? Ou autre chose ?
ಠ_ಠ
Ce que je veux dire c'est que les string ne peuvent pas avoir de taille prédéfinie. Un string est un string, qu'il fasse 1 ou 200 caractères. Tu ne peux pas dire "je veux que mon string ait une longueur X". Si tu mets X+1 caractères, le string va se redimensionner tout seul...
Je n'ai pas parlé de taille maximale Avec un StringBuilder si tu dis que la taille c'est 9 alors tu auras une exception qui sera levée (ArgumentOutOfRangeException), ce qui te laisse toute latitude pour pouvoir agir en fonction de tes besoins en catchant l'exception (soit refuser les caractères supplémentaires, soit les ajouter par exemple).
Le StringBuilder n'est qu'une solution parmi tant d'autre. En tout cas je persiste, on ne peut pas initialiser un string à taille fixe en .NET. Ou alors je suis curieux de savoir comment
Less Is More
Pensez à utiliser les boutons , et les balises code
Desole pour l'absence d'accents, clavier US oblige
Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.
Les string ne se redimensionnent pas, ils sont immutables. Soyons précis
Certes Là où je suis pas d'accord, ce'st que ce n'est pas avec ce constructeur là que l'on spécifie une taille max, c'est avec celui-ci.
ಠ_ಠ
Less Is More
Pensez à utiliser les boutons , et les balises code
Desole pour l'absence d'accents, clavier US oblige
Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.
Merci à Guulh
Ce que je veux, c'est réaliser une structure pour me permettre de lire un fichier avec des enregistrements de longueur fixe que j'ai réalisé en VB.Net.Claude: quel est ton besoin ? Veux tu faire de la validation, pour t'assurer que tel propriété de tel object est une string d'une taille donnée ? Ou veux tu exporter ces string quelque part, dans un fichier ? Ou autre chose ?
Dans cette structure, j'ai besoin de déclarer des strings avec une longueur définie pour que ma structure aie la longueur d'un enregistrement.
Si je peux utiliser <VBFixedString(25)> par exemple dans C#, ça m'ira très bien.
Par contre, j'ai un autre problème pour ouvrir (en C#), ce type de fichier avec des enregistrements de longueur fixe en mode Random.
Je n'ai trouvé aucune explication ni exemple dans l'aide.
Si tu peux m'aider j'en serai ravi
Claude Azoulai
J'ai trouvé une méthode pour lire mon fichier
Je m'aperçois que je lis tout mon fichier d'un coup (2320 octets).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 private void InitialiseDonnées() { Chemin = Application.StartupPath +"\\" ; nomFic = Chemin+"Amis.dat"; StreamReader sr = new StreamReader(nomFic); { string s = ""; while ((s = sr.ReadLine()) != null) { Longueur = s.Length; } } }
Bien sur, je pourrai le découper en plusieurs morceaus de la longueur d'un enregistrement et ensuite les découper pour retrouver tous mes champs.
N'y a-t-il pas une méthode pour lire les 80 premiers caractères (correspondant à un enregistrement) puis ensuite lire les 80 suivants et ainsi-de-suite.
Corolairement écrire dans un autre fichier les 80 premiers caractères et ensuite rajouter les 80 suivants et ainsi-de-suite.
Dans ce cas là, je n'ai plus besoins de prévoir une structure.
Merci de votre réponse
Claude Azoulai
Tu peux utiliser la méthode StreamReader.Read(char[], Int32, Int32).
Voici l'exemple fournit par msdn:
Comme tu peux le voir, les données sont récupérer dans un tableau de caractère.
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 using (StreamReader sr = new StreamReader(path)) { //This is an arbitrary size for this example. char[] c = null; while (sr.Peek() >= 0) { c = new char[5]; sr.Read(c, 0, c.Length); //The output will look odd, because //only five characters are read at a time. Console.WriteLine(c); } }
J’ai des questions à toutes vos réponses!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager