Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    89

    [VB6] Problema con lo split

    Utilizzando lo split di una stringa presa da un file sys esterno, mi carica fino a non so quanti caratteri, avrei bisogno di aumentarli oppure di aggirare questo problema. Praticamente sto facendo un programma per l'ascolto della radio, ma mentre carico i link me li taglia.
    Ecco il codice:
    codice:
    Dim inif As New clsIniF
    Private Sub ErrMSG(Testo As String, Tipo As String)
    MsgBox Testo, Tipo, ""
    End Sub
    
    Private Sub LoadRadios()
    Dim s As String
    Dim ListaRadio As String
    Dim i As Integer
    Dim FileInQuestion As String
          
    FileInQuestion = Dir("config.ini")
    If FileInQuestion = "" Then
         MsgBox "Errore n°001 - Impossibile trovare il file di configurazione. Vedi info sulla risoluzione nel menu Help>Errori.", vbCritical + vbOKOnly
         Exit Sub
    Else
    
    
    ListaRadio = inif.LeggiIni("File", "lista", "config.ini")
    
    If ListaRadio = "" Then
        ErrMSG "Errore n°002 - Impossibile caricare la lista radio. Vedi info sulla risoluzione nel menu Help>Errori.", vbOKOnly + vbCritical
        Exit Sub
    
    Else
        FileInQuestion = Dir(ListaRadio)
        
        If FileInQuestion = "" Then
            MsgBox "Errore n°003 - Impossibile trovare la lista radio. Vedi info sulla risoluzione nel menu Help>Errori.", vbCritical + vbOKOnly
            Exit Sub
        Else
    
        s = inif.LeggiIni("Radio", "list", ListaRadio)
        Dim words() As String
    
        words() = Split(s, "|")
    
        Dim tempStr As String
        For i = 0 To UBound(words)
    
        tempStr = Replace(words(i), ",", "")
        
        
        
        If Len(tempStr) > 0 Then
            Form2.Text1(i).Text = tempStr
        End If
        Next
    End If
    End If
    End If
    End Sub
    Private Sub CheckFile(Filename As String)
          Dim FileInQuestion As String
          FileInQuestion = Dir(Filename)
          If FileInQuestion = "" Then
             MsgBox "No such file!"
             Exit Sub
          Else
             MsgBox "File exists!"
          End If
       End Sub
    
    
    Private Sub FileEsci_Click()
    Unload Me
    End Sub
    
    Private Sub Form_Load()
    LoadRadios
    
    End Sub
    
    Private Sub HelpErrori_Click()
    Form2.Show
    
    End Sub
    Nel file .sys invece vi è:
    Quando però vado a caricare i link mi arriva fino a "liv" del link di "m2o".... Come posso risolvere?

  2. #2
    Ciao !

    Personalmente non credo che il problema possa risiedere nella Split, che non ha assolutamente di questi limiti...

    Del resto, provando a caricare la riga che posti:

    list=Virgin Radio|http://151.1.245.1/20|m2o|http://live.mediaserver.kataweb.it/m2o|R101|http://www.r101.it/r101/statici/diretta/r101.asx|

    in una variabile stringa, e a dividerla con Split, non si nota nessun troncamento....

    Prova ad inserire un Debug.Print prima del Replace che toglie le virgole, e vedi cosa ottieni...

    Puo' darsi che nel link originario ci siano dei caratteri di controllo non visibili che provocano il malfunzionamento (che, ripeto, non riesco a scorgere....)

    IceCube_HT (VB6 fan Club)

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La Split funziona regolarmente ... penso che il problema sia nella lettura della stringa ...

    Ma utilizzi una classe (clsIniF) di cui non sappiamo nulla ... controlla che la riga

    s = inif.LeggiIni("Radio", "list", ListaRadio)

    venga eseguita correttamente (visualizzando la stringa s) subito dopo averla eseguita ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    89
    se metto così non funziona:
    codice:
    Debug.Print tempStr = Replace(words(i), ",", "")
    Per quanto riguarda la classe clsIniF, l'ho trovata in internet con un esempio... Eccola:
    codice:
    Option Explicit
    
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
    
    
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
    
    Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
    
    Private fIni As String
    ' SCRIVE UNA SEZIONE/CHIAVE/VALORE SU UN FILE INI
    Public Function ScriviIni(ByVal sezione As String, ByVal chiave As String, ByVal valore As String, ByVal nfile As String) As Boolean
    Dim r As Long
    fIni = App.Path & "\" & nfile
    r = WritePrivateProfileString(sezione, chiave, valore, fIni)
    If r = 0 Then
        ScriviIni = False
    Else
        ScriviIni = True
    End If
    End Function
    ' rESTITUISCE IL VALORE DI UNA DETERMINATA CHIAVE IN UNA DETERMINATA SEZIONE DEL FILE INI
    Public Function LeggiIni(ByVal sezione, chiave As String, ByVal nfile As String) As String
    Dim r As Long
    Dim x As Integer
    Dim temp As String * 50
    Dim temp1 As String
    Dim n As String
    fIni = App.Path & "\" & nfile
    r = GetPrivateProfileString(sezione, chiave, n, temp, Len(temp), fIni)
    If r <> 0 And Len(temp) > 0 Then
        For x = 1 To 50
            n = Mid(temp, x, 1)
            If n <> Chr(0) Then
                temp1 = temp1 & n
            End If
        Next x
        LeggiIni = temp1
    Else
        LeggiIni = ""
    End If
    End Function
    ' Questa funzione mi restituisce una stringa con ile chiavi e i valori contenuti in una determinata
    ' sezione del file ini.
    ' OGNI VALORE è SPEZZATO DAL CARATTERE CHR(0) - PARSER PER RECUPERARE I SINGOLI VALORI
    Public Function RecSez(ByVal sezione As String, ByVal nfile As String) As String
    Dim buffer As String * 10000
    Dim x As Integer
    Dim newString As String
    Dim n As String
    fIni = App.Path & "\" & nfile
    GetPrivateProfileSection sezione, buffer, 30000, fIni
    For x = Len(buffer) To 1 Step -1
        n = Mid(buffer, x, 1)
        If n <> Chr(0) Then
            newString = Left(buffer, x)
            Exit For
        End If
    Next x
    RecSez = newString
    End Function

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da jack61
    se metto così non funziona:
    codice:
    Debug.Print tempStr = Replace(words(i), ",", "")
    E ci credo ... ! Cosa c'entra? Ti aveva detto "prima" del Replace

    Debug.Print words(i)

    per vedere cosa contiene il vettore ...

    Piuttosto che postare tutta la classe devi controllare il contenuto di s ... dopo la

    s = inif.LeggiIni("Radio", "list", ListaRadio)

    devi scrivere

    MsgBox s

    e controllare cosa viene letto dal file ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    89
    sul msgbox viene la forma spezzata.... quindi sta nella lettura dal file.... come posso risolvere?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Bene ... controlla passo passo cosa succede nella

    LeggiIni

    della classe ...

    EDIT: Il problema e' nel valore 50 che utilizzi per la stringa in uscita dalla funzione ... questo valore limitera' la lunghezza della stringa ... questa e' la conseguenza del copia-incolla di codice senza che se ne controlli il funzionamento ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    89
    OK! Risolto grazie mille... Se potesse servire a qualcuno:
    è bastato alzare questi numeri da 50 a 1000....
    - For x = 1 To 1000
    - Dim temp As String * 1000


    codice:
    ' rESTITUISCE IL VALORE DI UNA DETERMINATA CHIAVE IN UNA DETERMINATA SEZIONE DEL FILE INI
    Public Function LeggiIni(ByVal sezione, chiave As String, ByVal nfile As String) As String
    Dim r As Long
    Dim x As Integer
    Dim temp As String * 1000
    Dim temp1 As String
    Dim n As String
    fIni = App.Path & "\" & nfile
    r = GetPrivateProfileString(sezione, chiave, n, temp, Len(temp), fIni)
    If r <> 0 And Len(temp) > 0 Then
        For x = 1 To 1000
            n = Mid(temp, x, 1)
            If n <> Chr(0) Then
                temp1 = temp1 & n
            End If
        Next x
        LeggiIni = temp1
    Else
        LeggiIni = ""
    End If
    End Function

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.