Gambas France BETA


Pas de compte ? Incription

Déplacer données dans TextArea vers TableView

1
AuteurMessages
pinky#1 Posté hier à 10:48:17
Bonjour,
Mon application est composée d'une TextArea dans laquelle je colle des données qui sont affichées comme ceci dans la TextArea :
1
0 1.525 10 12.85 20 18 30 25.654


Il s'agit donc de données relevées tous les 10 kms.
La valeur au départ (donc au km 0 est de 1.5), la valeur au km 10 est de 12.8, etc ...
Les valeurs peuvent être avec ou sans point.
L'échelle pour les kms est toujours de "10" en "10" et commence à "0".

Le but de mon application est de déplacer les données contenues dans la TextArea, à l'aide d'un Button, dans un TableView qui possède deux colonnes (Colonne 1 pour les kms et colonne 2 pour les valeurs).



Auriez vous un exemple connu (Ou un tuto) qui explique comment faire ceci. Peut être que mon choix TextArea vers TableView n'est pas adapté à ce que je veux faire, je ne sais pas.

J'ai fouiné sur le forum et dans les exemples d'applications sur la Forge mais je n'ai pas trouvé comment faire.

Merci d'avance pour votre aide.
Dolmen (table pierre) : Caillou préféré des Bretons (un dolmen de prédilection).
vuott#2 Posté hier à 11:48:47
Ne cedere ineluctabili possimusIl serait peut-être possible de faire quelque chose de ce genre :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
PUBLIC SUB Form_Open()

' Attribuons les valeurs de votre exemple au TextArea :
TextArea1.Text = "0 1.525 10 12.85 20 18 30 25.654"

' Créons un simple TableView de base :
WITH TableView1
.Rows.Count = 2
.Columns.Count = 2
END WITH

END


PUBLIC SUB Button1_Click()

DIM ss AS String[]

' Nous supprimons les espaces de la chaîne de valeurs, pour n'avoir que des valeurs numériques :
ss = Split(TextArea1.Text, Chr(32))

' Nous attribuons le nombre correct et utile de lignes au TableView :
TableView1.Rows.Count = ss.Count / 2

' Nous identifions chaque ligne dans le TableView :
FOR r AS SHORT = 0 TO TableView1.Rows.Max
' Nous identifions les deux colonnes du TableView :
FOR c AS BYTE = 0 TO 1
' Nous attribuons la valeur du premier élément existant du tableau « ss » à la colonne correspondante :
TableView1[r, c].Text = ss[0]
' Nous supprimons le premier élément du tableau « ss » de sorte que le nouveau premier élément soit celui qui suit l'élément supprimé :
ss.Delete(0, 1)
NEXT
NEXT

END
« Vita non suavis esse potest, nec Mors amara. »
pinky#3 Posté hier à 12:44:13
Bonjour vuott et merci. Quelle rapidité.
C'est plus compliqué que je le pensais.
Je vais bien examiner ton code afin d'essayer de le comprendre et faire des tests.
Je reviendrai te dire ce que ça donne.
Je te remercie pour le temps passé sur ce code. ;)
Dolmen (table pierre) : Caillou préféré des Bretons (un dolmen de prédilection).
O.Coquet#4 Posté hier à 12:56:07
Ce qui n'est pas devra-t-être inventéLa question que je me pose avant toutes choses est:

Comment tes données arrivent-elles dans ce textarea ?????
Amitié
Olivier (Alias Olinux)

Raspberry pi 3 et 4, pc Xubuntu, Arduino.....
Quelques autres "vieux" ordinateurs !
Et un bon fer à souder
pinky#5 Posté hier à 13:07:20
Bonjour Olivier,
Par un simple copier/coller provenant d'une autre application.
Dolmen (table pierre) : Caillou préféré des Bretons (un dolmen de prédilection).
pinky#6 Posté hier à 13:22:48
Je viens de tester ton code vuott
J'ai l'impression que c'est exactement ce que je cherchais à faire depuis plusieurs jours. Tu m'as fait ça en quelques minutes. Je suis impressionné. :shock:
Peux tu me dire à quoi sert ce morceau de code ?
1
Chr(32)

Dolmen (table pierre) : Caillou préféré des Bretons (un dolmen de prédilection).
vuott#7 Posté hier à 14:27:20
Ne cedere ineluctabili possimus
Peux tu me dire à quoi sert ce morceau de code ?
1
Chr(32)


Comme je l'ai écrit dans le commentaire de cette ligne de commande: "Nous supprimons les espaces de la chaîne de valeurs, pour n'avoir que des valeurs numériques"; ...je suppose que vous souhaitez exclure le caractère « espace » (numéro décimal ASCII = 32, en hexadécimal = 20) des valeurs que vous saisissez dans les cellules de "TableView".

La fonction "Split()" divise une chaîne en sous-chaînes délimitées par des séparateurs et des caractères d’échappement.
Cette fonction renvoie un tableau de chaînes rempli avec chaque sous-chaîne détectée.

Si vous ne souhaitez pas utiliser la fonction "Chr()", vous pouvez utiliser le caractère 'escape' "\x" suivi de la valeur hexadécimale ASCII du caractère "espace":
1
ss = Split(TextArea1.Text, "\x20")

ou plus simplement en définissant explicitement le caractère de l'"espace":
1
ss = Split(TextArea1.Text, " ")
« Vita non suavis esse potest, nec Mors amara. »
pinky#8 Posté hier à 14:58:40
Merci pour les explications.
Je voulais en effet supprimer les espaces. Le code fonctionne parfaitement pour les espaces.
Y a t'il ce même genre de fonction pour supprimer les retours à la ligne dans le texte que je copie pour coller dans la TextArea ?
Dolmen (table pierre) : Caillou préféré des Bretons (un dolmen de prédilection).
vuott#9 Posté hier à 15:13:35
Ne cedere ineluctabili possimusPar « retours à la ligne », vous entendez probablement la « fin de la ligne ».

Vous pouvez utiliser :

- la constante Gambas 'gb.newline' ;

- la fonction 'Chr(10)' ou en hexadécimal 'Chr(&0A)' ;

- le caractère 'escape' "\x0A" ou (le plus couramment utilisé) "\n".
« Vita non suavis esse potest, nec Mors amara. »
pinky#10 Posté hier à 15:27:39
Oui, c'est probablement des fins de lignes.
Parfois, ceux qui remplissent les données qui proviennent de l'application d'origine dans laquelle je copie les données ne sont pas correctement saisies. Ils laissent parfois 2 espaces entre les nombres ou écrivent des lignes incomplètes et poursuivent à la ligne suivante.
Je ne sais pas si je suis très clair dans mes explications ?
Je vais tester avec les codes que vous venez de me donner.
Dolmen (table pierre) : Caillou préféré des Bretons (un dolmen de prédilection).
vuott#11 Posté hier à 15:31:32
Ne cedere ineluctabili possimusExemplum:
1
2
3
4
5
6
7
8
9
10
11
12
PUBLIC SUB Main()

' Chaîne de caractères contenant des espaces et une «fin de ligne» ("\n"):
s = "aaa bbb ccc\nddd eee fff\nggg hhh iii\n"

' "Split()" supprime espaces et «fin de ligne»:
ss = Split(s, gb.NewLine, " ", TRUE)

' Vérifier le résultat :
ss.Join(NULL, NULL)

END
« Vita non suavis esse potest, nec Mors amara. »
vuott#12 Posté hier à 15:37:09
Ne cedere ineluctabili possimus
Ils laissent parfois 2 espaces entre les nombres ou écrivent des lignes incomplètes et poursuivent à la ligne suivante.

...vous pouvez :| aussi utiliser la fonction native "Replace()" :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PUBLIC SUB Main()

DIM s AS STRING

' Cette chaîne possède des groupes de 2 caractères ou plus "espace":
s = "aaa bbb ccc\nddd eee fff\nggg hhh iii\n"

' Supprime TOUTS les caractères "espace" (même s’il existe des groupes de 2 ou plus "espaces"):
s = Replace(s, " ", NULL)

' Supprime "fin de ligne":
s = Replace(s, gb.NewLine, NULL)

PRINT s

END
« Vita non suavis esse potest, nec Mors amara. »
pinky#13 Posté hier à 15:47:02
Avec toutes ces solutions, je devrais réussir à faire quelque chose qui fonctionne. C'est motivant pour continuer. ;)
Je vais tester tranquillement afin d'essayer de comprendre car tout ça est compliqué pour moi.
Encore merci pour ton aide et ta patience.
Bonne soirée.
Dolmen (table pierre) : Caillou préféré des Bretons (un dolmen de prédilection).
vuott#14 Posté hier à 15:50:00
Ne cedere ineluctabili possimusBien sûr, il existe d’autres solutions, probablement encore meilleures, mais celles-ci me sont venues à l’esprit maintenant. :pale:

Bonne soirée.
« Vita non suavis esse potest, nec Mors amara. »
1