IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

separation en bloc


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Par défaut separation en bloc
    Bonjour a tous ,j'ai un petit souci a separer les valeurs d'un fichier
    voici les pages des blocs :

    r1 | r2 | s |
    --------------|-----|---------------|
    BLOCK1 1001 | 1136| 5001| 5080 |
    BLOCK2 1021 | 1156| 5081| 5100 |
    BLOCK3 1041 | 1176| 5101| 5120 |
    BLOCK4 1061 | 1196| 5121| 5140 |
    BLOCK5 1081 | 1216| 5141| 5160 |
    BLOCK6 1101 | 1236| 5161| 5180 |
    BLOCK7 1121 | 1256| 5181| 5200 |
    BLOCK8 1137 | 1261| 5201| 5262 |
    --------------|-----|-------|--------|

    et voici mon programme

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    While Not EOF(1)
     Line Input #1, A$: s1 = Val(Mid$(A$, 34, 4)): r1 = Val(Mid$(A$, 68, 4)): r2 = Val(Mid$(A$, 76, 4))
     
        If s1 >= 5001 Or s1 <= 5080 And r1 >= 1001 And r2 <= 1136 Then
        Print #2, A$; "  Block1"
     
        ElseIf s1 >= 5081 Or s1 <= 5100 And r1 >= 1021 And r2 <= 1156 Then
        Print #2, A$; "  Block2"
     
        ElseIf s1 >= 5101 And s1 <= 5120 And r1 >= 1041 And r2 <= 1176 Then
        Print #2, A$; "  Block3"
     
        ElseIf s1 >= 5121 And s1 <= 5140 And r1 >= 1061 And r2 <= 1196 Then
        Print #2, A$; "  Block4"
     
        ElseIf s1 >= 5141 And s1 <= 5160 And r1 >= 1081 And r2 <= 1216 Then
        Print #2, A$; "  Block5"
     
        ElseIf s1 >= 5161 And s1 <= 5180 And r1 >= 1101 And r2 <= 1236 Then
        Print #2, A$; "  Block6"
     
        ElseIf s1 >= 5181 And s1 <= 5200 And r1 >= 1121 And r2 <= 1256 Then
        Print #2, A$; "  Block7"
     
        ElseIf s1 >= 5201 And s1 <= 5262 And r1 >= 1137 And r2 <= 1261 Then
        Print #2, A$; "  Block8"
     
     
                  End If
      else   print #2,A$ ;"Mauvaise valeur"
       Wend
            End
    End Sub


    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Sur un Form, un TextBox, le fichier Blocks.txt est la copie de la structure proposé
    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
    16
    17
    18
    19
    20
    Option Explicit
    Dim Msg$
    Dim NumFich As Integer
    Dim MonTableau() As String
    Dim T As Integer
    Dim CheminNomFichier As String
    Private Sub Form_Load()
    'en design penser a mettre Text1.MultiLine = True
    CheminNomFichier = "C:\blocks.txt"
    NumFich = FreeFile
    Open CheminNomFichier For Input As #NumFich
    Msg$ = Input(FileLen(CheminNomFichier), NumFich)
    Close #NumFich
    Msg$ = Replace(Msg$, vbCrLf, "")
    MonTableau = Split(Msg$, "|")
    Text1.Text = ""
    For T = 0 To UBound(MonTableau)
     Text1.Text = Text1.Text & "Indice N°" & T & " Contenu : " & MonTableau(T) & vbCrLf
    Next T
    End Sub
    Les mots importants, Replace et Split, F2 et F1 sur ces mots t'en dirons plus
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Mis à part de fait que tu devrais selon toute évidence utiliser un fichier texte structuré en base de données ....... et non (comme tu le fais là) un fichier plat :

    Ce sont bien des cas, que tu traites là, non ?

    l'utilisation de Select Case serait donc plus appropriée que celle de If Then imbriqués.

  4. #4
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Par défaut
    Je m'excuse pour n'avoir pas trop expliquer ce que je souhaite
    j'ai un fichier texte organise en colonnes, je doit lire les lignes de ce fichier
    en ajoutant un commentaire a la fin de ces lignes suivant les plages de certaines valeurs
    le tableau des plages est ceci :

    -------|---r1--|--r2-|-----s1----|
    BLOCK1| 1001 | 1136| 5001-5080 |
    BLOCK2| 1021 | 1156| 5081-5100 |
    BLOCK3| 1041 | 1176| 5101-5120 |
    BLOCK4| 1061 | 1196| 5121-5140 |
    BLOCK5| 1081 | 1216| 5141-5160 |
    BLOCK6| 1101 | 1236| 5161-5180 |
    BLOCK7| 1121 | 1256| 5181-5200 |
    BLOCK8| 1137 | 1261| 5201-5262 |
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    While Not EOF(1)
     Line Input #1, A$: s1 = Val(Mid$(A$, 34, 4)): r1 = Val(Mid$(A$, 68, 4)): r2 = Val(Mid$(A$, 76, 4))
     
        If s1 >= 5001 Or s1 <= 5080 And r1 >= 1001 And r2 <= 1136 Then
        Print #2, A$; "  Block1"
     
        ElseIf s1 >= 5081 Or s1 <= 5100 And r1 >= 1021 And r2 <= 1156 Then
        Print #2, A$; "  Block2"
     
        ElseIf s1 >= 5101 And s1 <= 5120 And r1 >= 1041 And r2 <= 1176 Then
        Print #2, A$; "  Block3"
     
        ElseIf s1 >= 5121 And s1 <= 5140 And r1 >= 1061 And r2 <= 1196 Then
        Print #2, A$; "  Block4"
     
        ElseIf s1 >= 5141 And s1 <= 5160 And r1 >= 1081 And r2 <= 1216 Then
        Print #2, A$; "  Block5"
     
        ElseIf s1 >= 5161 And s1 <= 5180 And r1 >= 1101 And r2 <= 1236 Then
        Print #2, A$; "  Block6"
     
        ElseIf s1 >= 5181 And s1 <= 5200 And r1 >= 1121 And r2 <= 1256 Then
        Print #2, A$; "  Block7"
     
        ElseIf s1 >= 5201 And s1 <= 5262 And r1 >= 1137 And r2 <= 1261 Then
        Print #2, A$; "  Block8"
     
                  End If
                  Else: Print #2, A$; "Mauvaise"
       Wend
            End
    End Sub

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Y a-t-il une différence avec ton premier code, à part l'erreur If then ... Elsesif ... Elseif ... end if
    Else...'''

    que tu viens de rajouter ?

    Et je t'ai parlé de Select Case, non ?

  6. #6
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Par défaut
    Salut ucfoutu
    J'ai bien note ta suggestion ,j'ai cherche des exemples utilisant case select avec plusieurs conditions a la fois ,pas de chance.

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bon...

    Je ne vais pas te servir ta soupe prête à être mangée !
    Tu vas la mouliner avec moi, ta soupe !

    Alors :

    1) tu peux toujours faire un select case utilisant s1 et vérifier pour chaque cas ta condition avec r1 et r2, non ?
    2) j'observe que tes r1 et r2 ont des limites s'incrémentant régulièrement de la même valeur (20), sauf les toutes dernières ...
    Et mon petit doigt me souffle qu'il me serait possible d'utiliser cette particularité (en y pensant bien, hors toute connaissance de VB... juste de la réflexion)....

    En case s1 compris, par exemple, entre 5081 et 5100, il me suffirait (tiens donc) de jeter un coup d'oeil aux entiers de la division par 20 de de r1 et de r2 et... et de quoi faire ? ... réfléchis (ce n'est pas du VB, mais de l'agilité d'esprit)...

    Bonne tentative de mise à exécution

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Trier et separer entre des blocs de dates
    Par iliesss dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/06/2012, 21h09
  2. Réponses: 5
    Dernier message: 21/04/2004, 12h43
  3. Partage de blocs mémoire entre 2 processus
    Par rolkA dans le forum Windows
    Réponses: 6
    Dernier message: 18/11/2003, 20h08
  4. [VB6] mise en commentaire d'un bloc de code
    Par JuanDeLaPlaya dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/04/2003, 16h05
  5. Périphérique de bloc
    Par MAGNUM_HEAD dans le forum Administration système
    Réponses: 4
    Dernier message: 20/03/2003, 20h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo