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

    [VB6] Leggere un file di grosse dimensioni

    Salve a tutti ho il seguente problema:

    devo fare il parse di un file xml di grosse dimensioni (per l'esattezza è in formato RDF).

    Non sapendo che pareser usare e dovendo fare semplici operazioni, ho deciso di aprire il file come un semplice file di testo e trattarlo come al solito.

    Solo che il file è davvero grosso (quasi 1 giga...) e non posso aprirlo una linea alla volta perchè il file NON contiene interruzioni di linea!

    quindi usando il codice:


    codice:
    Open Text1 For Input As #FileNum%
    
        Line Input #FileNum%, A$
        Contenuto = Contenuto & A$
    
    Close #FileNum%
    Il sistema mi apre comunque TUTTO il file... o meglio ci prova... visto che poi si impasta per via della dimensione del file.

    Come posso fare per aprire solo una porzione di file alla volta?

    Grazie!
    «Nella mia carriera ho sbagliato più di novemila tiri. Ho perso quasi trecento partite. Ventisei volte i miei compagni mi hanno affidato il tiro decisivo e l'ho sbagliato. Nella vita ho fallito molte volte. Ed è per questo che alla fine ho vinto tutto» - Michael Jordan

    «Prima ti ignorano, poi ti deridono, poi ti combattono. Poi vinci.» - Gandhi

  2. #2
    Utente di HTML.it L'avatar di Corwin
    Registrato dal
    Jan 2002
    Messaggi
    584
    Provato con For Binary ? Abbastanza scomodo per un file di testo ma ero riuscito a farci un programma per tagliare i Divx (700+ mb...)
    I don't wanna have to shout it out / I don't want my hair to fall out
    I don't wanna be filled with doubt / I don't wanna be a good boy scout
    I don't wanna have to learn to count / I don't wanna have the biggest amount
    I don't wanna grow up

  3. #3
    Ok, ho in parte risolto il problema utilizzando l'XML parser di VB6... alla fine sono riuscito a capire come funziona in linea di massima.

    Ora però ho un problema proprio relativamente al parser XML.

    dato un documento tipo

    codice:
    <Inizio r:id="Start">
    <Nome>Paolo</Nome>
    
    </Inizio>
    riesco a prelevare senza problemi l'informazione Paolo.

    Non riesco invece a leggere il valore di Inizio r:id, ovvero non riesco a far leggere il valore "Start"

    questo il codice che utilizzo:

    codice:
    ' PUNTO AL NODO CHE MI INTERESSA
    Set elemento = obj.documentElement
    Set nome = elemento.selectNodes("Inizio")
    
    ' ESTRAGGO TUTTI I NODI E LI STAMPO IN TEXT3
        For Each nodo In nome
            Text3 = Text3 & nodo.Text & vbCrLf
        Next
    Qualcuno sa come si fa a recuperare quell'informazione?


    Grazie!
    «Nella mia carriera ho sbagliato più di novemila tiri. Ho perso quasi trecento partite. Ventisei volte i miei compagni mi hanno affidato il tiro decisivo e l'ho sbagliato. Nella vita ho fallito molte volte. Ed è per questo che alla fine ho vinto tutto» - Michael Jordan

    «Prima ti ignorano, poi ti deridono, poi ti combattono. Poi vinci.» - Gandhi

  4. #4
    Utente di HTML.it L'avatar di Corwin
    Registrato dal
    Jan 2002
    Messaggi
    584
    nodo.getAttribute("nome_attributo")
    I don't wanna have to shout it out / I don't want my hair to fall out
    I don't wanna be filled with doubt / I don't wanna be a good boy scout
    I don't wanna have to learn to count / I don't wanna have the biggest amount
    I don't wanna grow up

  5. #5
    Mi scrive:

    >>>> Impossibile trovare il metodo o il membro dei dati.

    Premetto che nel menù automatico, per l'oggetto "nodo" non appare in elenco il metodo .getattribute

    Appare invece per l'oggetto "elemento", ma facendo la prova mi da l'errore

    >>>> Utilizzo non valido di Null

    Posto il codice completo:

    codice:
    ' DICHIARATO ALL'INIZIO DEL PROGETTO
    Option Explicit
        Dim obj As DOMDocument
        Dim nome As IXMLDOMNodeList
        Dim elemento As IXMLDOMElement
        Dim nodo As IXMLDOMNode
    
    
    ' FUNZIONE
    
    Sub ApriFile()
    Dim ciao As String
    
        ' CARICO IL FILE XML
        Set obj = New DOMDocument
        obj.async = False
        obj.Load "test.xml"
        
    
        ' RECUPERO IL NODO CHE MI INTERESSA
        Set elemento = obj.documentElement
        Set nome = elemento.selectNodes("Inizio")
    
    ' Questa istruzione genera l'errore di utilizzo non valido di NULL
    ciao = elemento.getAttribute("r:id")
    
        ' ESTRAGGO TUTTI I NODI E LI STAMPO A VIDEO
        For Each nodo In nome
    
    ' Questa istruzione genera l'errore di metodo non supportato
            Text3 = Text3 & nodo.getAttribute("r:id") & vbCrLf
        Next
    
    End Sub
    Il file XML appare come nel messaggio precedente

    grazie!
    «Nella mia carriera ho sbagliato più di novemila tiri. Ho perso quasi trecento partite. Ventisei volte i miei compagni mi hanno affidato il tiro decisivo e l'ho sbagliato. Nella vita ho fallito molte volte. Ed è per questo che alla fine ho vinto tutto» - Michael Jordan

    «Prima ti ignorano, poi ti deridono, poi ti combattono. Poi vinci.» - Gandhi

  6. #6
    Utente di HTML.it L'avatar di Corwin
    Registrato dal
    Jan 2002
    Messaggi
    584
    C'hai ragione pure tu... o dichiari nodo come IXMLDOMElement
    e recuperi i nodi con

    set nome = elemento.getElementsByTagName("Inizio")

    o in alternativa puoi farti restituire un IXMLDOMNamedNodeMap con la proprietà Attributes del nodo, ma non l'ho mai usato.
    I don't wanna have to shout it out / I don't want my hair to fall out
    I don't wanna be filled with doubt / I don't wanna be a good boy scout
    I don't wanna have to learn to count / I don't wanna have the biggest amount
    I don't wanna grow up

  7. #7
    Ti ringrazio, ma l'ultimo messaggio è quasi arabo per me

    Spiegandolo come ad un bambino di 2 anni (in questo momento infatti ne so quanto un bambino ) per leggere l'attributo r:id che in questo caso è valorizzato come "Start"... che istruzione dovrei usare? o meglio come dovrei modificare il codice che ho postato?

    Lo so che in pratica ti chiedo la pappa pronta... ma davvero ci capisco poco essendo alle prime armi.
    «Nella mia carriera ho sbagliato più di novemila tiri. Ho perso quasi trecento partite. Ventisei volte i miei compagni mi hanno affidato il tiro decisivo e l'ho sbagliato. Nella vita ho fallito molte volte. Ed è per questo che alla fine ho vinto tutto» - Michael Jordan

    «Prima ti ignorano, poi ti deridono, poi ti combattono. Poi vinci.» - Gandhi

  8. #8
    Utente di HTML.it L'avatar di Corwin
    Registrato dal
    Jan 2002
    Messaggi
    584
    Per la prima soluzione che ti ho dato in teoria basta cambiare

    Dim nodo As IXMLDOMNode

    con

    Dim nodo as IXMLDOMElement

    e cambiare

    Set nome = elemento.selectNodes("Inizio")

    con

    Set nome = elemento.getElementsByTagName("Inizio")

    e a quel punto l'oggetto nodo DOVREBBE avere il metodo getAttribute che adesso ti da errore.
    I don't wanna have to shout it out / I don't want my hair to fall out
    I don't wanna be filled with doubt / I don't wanna be a good boy scout
    I don't wanna have to learn to count / I don't wanna have the biggest amount
    I don't wanna grow up

  9. #9
    Funzioooonaaaaa !!!! :mavieni:


    Grazie mille!
    «Nella mia carriera ho sbagliato più di novemila tiri. Ho perso quasi trecento partite. Ventisei volte i miei compagni mi hanno affidato il tiro decisivo e l'ho sbagliato. Nella vita ho fallito molte volte. Ed è per questo che alla fine ho vinto tutto» - Michael Jordan

    «Prima ti ignorano, poi ti deridono, poi ti combattono. Poi vinci.» - Gandhi

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.