Transformation d'une chaine de caractères [Résolu]

Messages postés
63
Date d'inscription
samedi 11 octobre 2003
Statut
Membre
Dernière intervention
30 janvier 2012
- - Dernière réponse : NHenry
Messages postés
14444
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 mai 2019
- 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.
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
14444
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 mai 2019
158
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 141 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
14444
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 mai 2019
158
0
Merci
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
Commenter la réponse de NHenry
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
77
0
Merci
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)
Commenter la réponse de cs_Jack
Messages postés
63
Date d'inscription
samedi 11 octobre 2003
Statut
Membre
Dernière intervention
30 janvier 2012
0
Merci
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.
Commenter la réponse de cs_wholehog2
Messages postés
63
Date d'inscription
samedi 11 octobre 2003
Statut
Membre
Dernière intervention
30 janvier 2012
0
Merci
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.
Commenter la réponse de cs_wholehog2
Messages postés
14444
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 mai 2019
158
0
Merci
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
Commenter la réponse de NHenry
Messages postés
63
Date d'inscription
samedi 11 octobre 2003
Statut
Membre
Dernière intervention
30 janvier 2012
0
Merci
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.
Commenter la réponse de cs_wholehog2
Messages postés
63
Date d'inscription
samedi 11 octobre 2003
Statut
Membre
Dernière intervention
30 janvier 2012
0
Merci
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))
Commenter la réponse de cs_wholehog2
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
77
0
Merci
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
Commenter la réponse de cs_Jack
Messages postés
63
Date d'inscription
samedi 11 octobre 2003
Statut
Membre
Dernière intervention
30 janvier 2012
0
Merci
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.
Commenter la réponse de cs_wholehog2
Messages postés
63
Date d'inscription
samedi 11 octobre 2003
Statut
Membre
Dernière intervention
30 janvier 2012
0
Merci
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.
Commenter la réponse de cs_wholehog2
Messages postés
14444
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 mai 2019
158
0
Merci
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
Commenter la réponse de NHenry
Messages postés
63
Date d'inscription
samedi 11 octobre 2003
Statut
Membre
Dernière intervention
30 janvier 2012
0
Merci
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.
Commenter la réponse de cs_wholehog2

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.