Transformation d'une chaine de caractères

Résolu
cs_wholehog2 Messages postés 63 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 janvier 2012 - 14 janv. 2012 à 23:56
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 18 janv. 2012 à 18:53
Bonjour à tous!
J'ai besoin d'aide car je dois transformer des lignes d'un fichier txt dans un autre langage. J'arrive à lire le fichier txt ligne par ligne mais pour manipuler la ligne je ne vois pas comment faire. voici un exemple:

ligne du txt
CUE 1.0
CHAN 112/HFF 273/H5C 301/H8F 302/HFF 303/HFF 304/HFF 305/HFF 307/H99 308/H99
CHAN 309/H99 312/HFF 313/HFF 314/HFF 315/HFF 317/HFF 318/HFF 319/HFF 320/HFF
CHAN 321/HFF 322/HFF 402/HFF 403/HFF 404/HFF 407/HFF 410/HFF 411/HFF 412/HFF
CHAN 413/HFF 415/HFF 416/HFF 417/HFF 419/HFF 420/HFF 421/HFF 422/HFF 423/HFF


en
<Cue index="1">
<Number number="1" sub_number="0" />
<CueDatas>
<CueData value_multipart_index="0" effect_multipart_index="0">
<Channel fixture_id="112" channel_id="112" attribute_name="DIM" />
<Value>100.000</Value>
</CueData>
<CueDatas>
<CueData value_multipart_index="0" effect_multipart_index="0">
<Channel fixture_id="273" channel_id="273" attribute_name="DIM" />
<Value>36.000</Value>
</CueData>

etc ...



p.s. dans le txt les valeurs aprés les / sont en hexadecimal et à convertir en pourcentage par rapport à 255 (mais j'ai un tableau de correspondance)

D'avance merci.

13 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
18 janv. 2012 à 18:53
Bonjour,

Afin que ta réflexion soit utile pour les autres, postes si possible la solution obtenue ?

Penses aussi à clore la question en mettant "Réponse acceptée" sur le ou les messages qui t'ont aidés.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
15 janv. 2012 à 01:21
Bonjour,

Je pense qu'il faut que tu prenne le fichier ligne par ligne, pour chaque ligne de données, retirer le "CHAN", et séparer avec un Split sur les espaces, comme ça pour chaque ligne tu auras un tableau des couple de valeur.

Pour séparer les valeurs, tu split sur le "/" puis pour la valeur hexa, tu peux utiliser Integer.Parse avec un NumberFormat en Hexa (voir MSDN).

Après, c'est un traitement de la chaine.

Précises un peu plus, ce qui bloque et on t'aidera.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 janv. 2012 à 01:48
Salut

Utilise un Split avec / pour séparer chaque couple de donnée, puis un second Split avec espace pour séparer les deux données de chaque couple.
Ensuite, convertit ta donnée hexa en décimal et fait ta règle de 3 pour trouver ton pourcentage.

Une fois que la séparation des données sera au point, gère ton fichier XML, il y a des tas d'exemples sur le site en faisant une boucle.

Exemple de découpage :
Dim maLigne As String = "CHAN 112/HFF 273/H5C 301/H8F 302/HFF 303/HFF 304/HFF 305/HFF 307/H99 308/H99"
Dim mesCouples() As String = maLigne.Split(" ")
Dim mesDatas() As String
Dim monPourcent As Integer
For r As Integer = mesCouples.GetLowerBound(0) + 1 To mesCouples.GetUpperBound(0)
    mesDatas = mesCouples(r).Split("/")
    ' mesDatas(0) contient le channel_id, comme 112
    ' mesDatas(1) contient le chiffre hexa, comme HFF
    monPourcent = Val("&" & mesDatas(1))
    monPourcent = CInt(CDbl(monPourcent * 100 / 255))
    Debug.Print(mesDatas(0) & vbTab & mesDatas(1) & vbTab & monPourcent.ToString)
Next r

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_wholehog2 Messages postés 63 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 janvier 2012
15 janv. 2012 à 16:24
Merci de m'avoir répondu.

Mes recherches d'hier soir ont abouti à ce que vous me dites, à savoir utiliser le split.

je commence le codage et je vous tiens au courant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_wholehog2 Messages postés 63 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 janvier 2012
15 janv. 2012 à 18:02
j'ai une question.
Que me conseillez vous pour créer mon fichier txt. Y écrire ligne par ligne ou mettre les lignes dans une textbox (il y aura pas mal de lignes) et ecrire tout d'un coup.
Pouvez vous aussi me donner des exemples de code.

Merci.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
15 janv. 2012 à 18:29
Bonjour,

Utilises plutot une List(Of String) et utilises System.IO.File.WriteAllLines.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_wholehog2 Messages postés 63 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 janvier 2012
15 janv. 2012 à 22:53
bon j'y suis presque mais je ne vous ai pas tout montré. voici l'exemple de ce que je dois lire:
CUE 90.0
$$CUEPARAMS 0 0
DOWN 10 0
UP 10 0
$$WAIT 0 0
TEXT Services
$$TEXT Services
$$GOONGO 2
CHAN 44/HFF 50/H99 51/H99 52/H99 53/H99 54/H99 
CHAN 55/H99 181/H95 182/H95 183/H7E 184/H7F 185/H7E 
CHAN 186/H7F 187/H7E 189/H95 254/HFF 
$$PRESETTEXT Services
$$TEXT Services
$$ATTRIBUTETIMES 0 0 0 0 0 0 0 0 0 100 100 100 


j'ai besoin des lignes qui n'a pas de $

et ce a quoi je doit arrivé :
		<Cue index="5">
<Number number="8" sub_number="0" />
<CueDatas>
<CueData value_multipart_index="0" effect_multipart_index="0">
<Channel fixture_id="6" channel_id="6" attribute_name="DIM" />
<Value>25.000</Value>
</CueData>
<CueData value_multipart_index="0" effect_multipart_index="0">
<Channel fixture_id="7" channel_id="7" attribute_name="DIM" />
<Value>68.000</Value>
</CueData>
<CueData value_multipart_index="0" effect_multipart_index="0">
<Channel fixture_id="9" channel_id="9" attribute_name="DIM" />
<Value>59.000</Value>
</CueData>
</CueDatas>
<CuePart index="0" name="test de cue" basic_fade="1.000" />
</Cue>


Mon souci c'est que les infos ne sont pas dans le même ordre. A part tout stocker et remettre dans le bon ordre, je ne voit pas comment stocker toutes les valeurs des channels.
Encore merci pour vos réponses.
0
cs_wholehog2 Messages postés 63 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 janvier 2012
15 janv. 2012 à 23:04
ha j’oubliai qu'il me sort l'erreur : "L'index se trouve en dehors des limites du tableau." pour cette ligne :
monPourcent = Val("&" & channel(1))
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 janv. 2012 à 17:42
C'est que les données n'ont pas la même forme.
Faudrait savoir a quoi correspond ton "channel" et à quelle ligne de ton fichier cela correspond.
Faut apprendre à déboguer :
- F9 sur une ligne de code; elle change de couleur
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement
0
cs_wholehog2 Messages postés 63 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 janvier 2012
16 janv. 2012 à 18:13
j'ai trouvé d’où venait l'erreur: il y avait un index de trop.

Ce que je veux convertir c'est une conduite d'un éclairage de spectacle qui a été exporté dans un format théoriquement lisible par les autres console mais la pas de chance la mienne est encore en développement et ne sait pas faire ça. A moi donc (dans la mesure du possible) d'essayer de faire la conversion vers un format quelle lit.
fixture et channel sont la même chose c'est à dire un projecteur qui est associé à une intensité.
Enfin il y aussi le nom de chaque effet et son temps d'apparition et de disparition.

J'ai un peu avancé mais j'ai encore des soucis.
0
cs_wholehog2 Messages postés 63 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 janvier 2012
17 janv. 2012 à 16:15
j'ai bien avancé mais il me reste une dernière chose à faire ou je bloque.

j'ai une variable en string qui contient des temps mais sous plusieurs formes :
4 / 3.5 / 2:05

4 veut dire 4 secondes
3.5 veut dire 3 secondes et 5 dixième
2:05 veut dire 2 minutes et 5 secondes

et il me faut retourner un temps en secondes au format "0.000" en string

Pouvez vous me dire comment faire ?
d'avance merci.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 janv. 2012 à 21:02
Bonjour,

Si tu as toujours deux parties, tu peux vérifier avec un Contains et séparer avec un Split.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_wholehog2 Messages postés 63 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 janvier 2012
18 janv. 2012 à 15:23
j'ai réussi à faire ce que je voulais, certainement que ça ne respecte pas les règles de l'art mais l'essentiel sait que j'obtienne ce que je veux.
Merci pour votre aide.
0
Rejoignez-nous