string a longueur limite dans une structure
string a longueur limite dans une structure
Bonjour,
Comment fait on pour fixer une longeur limite dans une chaine inclu dans une structure?
On a par exemple en vb :
Type montype
...
client_nom As String * 60
...
End Type
Pour apres ecrire dans un fichier qui a des enregistrements de longueur toujours fixe.
Merci.
Comment fait on pour fixer une longeur limite dans une chaine inclu dans une structure?
On a par exemple en vb :
Type montype
...
client_nom As String * 60
...
End Type
Pour apres ecrire dans un fichier qui a des enregistrements de longueur toujours fixe.
Merci.
Juste une ou deux petites remarques concernant cette méthode.
Il faut faire attention à ce que l'on écrit avec la commande PokeS car cette commande ne reçoit pas de paramètre indiquant un maximum de caractères à écrire,
donc rien n'empêche PokeS d'écrire une chaine plus longue que la valeur définie dans la structure.
PokeS écrit la chaine ainsi que son caractère nul de fin de chaine (0).
Si on utilise dans la structure une variable après avoir déclaré TypeChaine.b[15] par exemple, et que PokeS écrit plus de caractères que les 15, la valeur contenue dans la variable qui suit cette "chaine" sera écrasée
Voici un exemple
exécutez ce code et vous verrez que Machaine\Nombre ne retourne pas la valeur 1450
Il faut faire attention à ce que l'on écrit avec la commande PokeS car cette commande ne reçoit pas de paramètre indiquant un maximum de caractères à écrire,
donc rien n'empêche PokeS d'écrire une chaine plus longue que la valeur définie dans la structure.
PokeS écrit la chaine ainsi que son caractère nul de fin de chaine (0).
Si on utilise dans la structure une variable après avoir déclaré TypeChaine.b[15] par exemple, et que PokeS écrit plus de caractères que les 15, la valeur contenue dans la variable qui suit cette "chaine" sera écrasée
Voici un exemple
Code : Tout sélectionner
Structure ma_structure
TypeChaine.b[15]
Nombre.l
EndStructure
Machaine.ma_structure
Machaine\Nombre= 1450
PokeS(@Machaine\TypeChaine[0], "Bonjour bbbbbbbbbb")
Debug PeekS(@Machaine\TypeChaine[0])
Debug Machaine\Nombre
Ben, je souhaites ecrire un fichier formater en trames toutes de la meme longeur mais au contenu differrents.
ex :
fichier=[trame1 128ot] [trame2 128ot][trame3 128ot][trame3 128ot][trame5 128ot][trame18 128ot]....
trame1=client*50,prenom*50,tel*20, age*8
trame3=adresse*128
...
c'est un exemple bidon, mais bon.
ex :
fichier=[trame1 128ot] [trame2 128ot][trame3 128ot][trame3 128ot][trame5 128ot][trame18 128ot]....
trame1=client*50,prenom*50,tel*20, age*8
trame3=adresse*128
...
c'est un exemple bidon, mais bon.
A moins que Fred nous dise le contraire, il ne me semble pas possible de définir une longueur max d'une chaine par déclaration.
Tu pourrais régler ton problème en limitant la chaine finale à écrire dans le fichier à la longueur voulue si celle-ci dépasse la longueur max.
Tu teste la longueur avec len(chaine$)
et tu utilise la fonction Mid(Chaine$, PositionDepart, Longueur) pour limiter sa longueur.
C'est peut-être pas l'idéal mais cela devrait aller.
Tu pourrais régler ton problème en limitant la chaine finale à écrire dans le fichier à la longueur voulue si celle-ci dépasse la longueur max.
Tu teste la longueur avec len(chaine$)
et tu utilise la fonction Mid(Chaine$, PositionDepart, Longueur) pour limiter sa longueur.
C'est peut-être pas l'idéal mais cela devrait aller.
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
c'est pas mid qu'il faut utiliser mes left(string, 60) pour prendre en compte seulement les 60 premier carac
sinon, je pense aussi qu'il ne faut se casser la tête avec la longueur des strings
tu gères la longeur quand on rentre le texte. si çà dépasse X carac, tu tranche avec la fonction left en ralant sur l'utilisateur
si c'est trop court et que tu veut stocker des carac qui font toujours la longueur X, tu utilise les fonctions Lset et Rset qui permmettent d'ajouté des carac afin d'otenir une longueur voulue.
dans ton cas, on aurait :
- pour lire la donnée entrer par un utilisateur
- Pour l'écrire dans le fichier :
- Pour lire dans le fichier
Bon, je sais pas si c'est writestring et readstring qu'l faut utiliser dans ton cas. plutôt WriteData et ReadData
sinon, je pense aussi qu'il ne faut se casser la tête avec la longueur des strings
tu gères la longeur quand on rentre le texte. si çà dépasse X carac, tu tranche avec la fonction left en ralant sur l'utilisateur
si c'est trop court et que tu veut stocker des carac qui font toujours la longueur X, tu utilise les fonctions Lset et Rset qui permmettent d'ajouté des carac afin d'otenir une longueur voulue.
dans ton cas, on aurait :
- pour lire la donnée entrer par un utilisateur
Code : Tout sélectionner
Texte.s = Trim(getgadgettext(#Texte))
if Len(Texte) > 60 ; si le texte est trop long
messagerequester("Erreur", "Le texte est trop long, il a été coupé", 3*16) ; on rale
Texte = left(Texte, 60) ; On coupe le texte
SetgadgetText(#Texte, Texte) ; On réaffiche le texte
endif
Code : Tout sélectionner
writestring(LSet(Texte, 60, " ")) ; On complète le texte avec des espaces afin d'obtenir 60 carac
Code : Tout sélectionner
Texte = Trim(readstring) ; On retire les espaces en trop
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]