Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [VB2005] "Cannot obtain value"

    Sto usando le espressioni regolari per ottenere dati da un sorgente. Tuttavia quando inizia questa procedura il programma si blocca:
    codice:
        Private Sub Replace(ByVal R As Regex)
            Dim Matches As MatchCollection
    
            Matches = R.Matches(txtCode.Text)
    
            '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            'Qui il programma di blocca, ma non dà nessun errore
            'Se si inserisci un breakpoint, tutti i membri di Matches
            'visualizzano l'etichetta "cannot obtain value"
            '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            Do While Matches.Count > 0
                Dim Str As String
    E si verifica quello che è stato scritto in commento nel codice.
    Qualcuno mi può aiutare?

  2. #2
    Posta la regex che usi: forse è troppo complessa.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Beh... a quello non avevo pensato, ma mi servono proprio così:
    codice:
        'Tutti gli specificatori di accesso
        Public Const Scope As String = "(private|public|protected|friend|protected friend)"
        'Identificatori (campo)
        Public Const Identifier As String = "([\w\d_][\w\d_\[\]\<\>\*]*)"
        'Identificatori (tipo)
        Public Const IdentifierType As String = "([\w\d_][\w\d_\[\]\<\>\*\.\:]*)"
        'Pattern usato per trovare le variabili
        Public Const Variable As String = "(?<Type>IDt)\s+(?<Name>ID)"
        Public NormalVariable As String = "\s*(?<Type>IDt)\s+((?<Name>ID)(\s*,\s*)?)+\s*(=.+)?;"
        Public ScopeVariable As String = Scope & NormalVariable
        Public Argument As String = "\(?\s*" & Variable & "\s*(,|\))"
    
        'Pattern usato per trovare strutture/enumeratori
        Public ValueType As String = "(static)?\s*(?<type>(struct|enum))\s+(?<Name>ID)[\s\n]*\{"
        Public EnumValueType As String = "\{((?<Name>ID)(\s*=\s*IDt)?(\s*,[\s\n]*)?)*\}"
    
        'Pattern usato per trovare classi/moduli/interfacce
        Public ClassType As String = "(static)?\s*(?<type>(class|interface))\s+(?<Name>ID)(\s*:\s*IDt(\s*,\s*)?)*[\s\n]*\{"
    
        'Pattern usato per trovare le procedure/funzioni/proprietà
        Public Method As String = "\s*IDt\s+(?<Name>ID)\(.*\)[\s\n]*\{"
    ID viene sostituito dopo con Identifier, mentre IDt con IdentifierType.

  4. #4
    Ora come ora non ho tempo di controllarle una per una, prova a controllarle tu usando tool come Expresso.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Cosa devo controllare? Intendi controllare se sono giuste? Se è questo che intendi, allora te lo dico subito: prima di avere questo errore, il programma funzionava (chissà perchè...) e tutte le espressioni regolari catturavano le stringhe giuste, le avevo già testate.

  6. #6
    Intendo controllare in Expresso la regex che dà problemi con lo stesso identico testo da analizzare: se non ti dà problemi, il problema è nel tuo codice, altrimenti è nella regex.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Ho testato i pattern per Method, Class, ValueType ed EnumvalueType e vanno tutti bene. Quando cerco di testare NormalVariable, ScopeVariable e Argument, Expresso si blocca (come il mio programma del resto). Ho corretto un = con \=, ma dà gli stessi problemi.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.