Newsgroup: it.comp.lang.visual-basic
Titolo: programmazione OOP [lunghetto]

a tutti gli appassionati di OOP....
mi trovo a risolvere il seguente problema:
tramite il controllo Inet, vado a raccogliere in automatico una "pagina" che
contiene una tabella.
La pagina, di suo, sarebbe fatta per essere visualizzata, ma a me interessa
raccogliere tutte le righe della tabella visualizzata, ed inserirle in un
recordset.
La cosa, dal mio punto di vista, non presenta problemi teorici, per lo meno
non li ha presentati le altre volte che ho dovuto affrontare questo tipo di
argomenti.
E allora che ci fai da queste parti? chiederete voi.
Semplicemente questa volta vorrei provare ad utilizzare un approccio diverso
alla soluzione del problema: fino ad ora ho utilizzato funzioni e
subroutine, adesso vorrei provare una cosa "object oriented". La mia
conoscenza dell'approccio all'OOP č talmente scarsa che non so neanche se
abbia un senso se applicata al problema in questione, quindi vorrei che
qualcuno mi guidasse/consigliasse in merito.
Allora, in pseudocodice e secondo il mio approccio la cosa sarebbe cosě
messa:
dim Pagina as string 'contiene il codice html della pagina da analizzare
public function EstraiDati (Pag as string, nTabella as integer) as
Adodb.recordset
'passando la stringa a questa funzione restituisce il recordset che contiene
i dati visualizzati nella nTabellesima tabella contenuta nella pagina)
all'interno di questa function viene analizzato l'html per trovare l'inizio
e la fine delle varie tabelle, utilizzando i tag <table> e </table>
Una volta individuata l'nTabellesima tabella la parte di stringa che la
contiene viene inviata ad una function che restituisce un vettore di
stringhe, in cui ogni elemento contiene una riga della tabella. La funzione
in questione usa i tag <tr> e </tr> per fare il suo lavoro.
il vettore restituito dalla funzione di cui sopra viene analizzato riga per
riga da un'altra  apposita funzione che individua i campi tramite i tag <td>
e </td>
ciascuno di questi campi viene analizzato da una ulteriore funzione che si
preoccupa di separare il "dato" dai restanti tag html.
viene costruito al run time il recordset che deve contenere i dati,
opzionalmente si potrebbe utilizzare la prima riga per generare i nomi dei
campi, si potrebbe anche esplorare l'ipotesi di analizzare la prima riga dei
dati per generare un recordset con i tipi di campi appropriati, al momento
utilizzo tutte stringhe e morta lě
si caricano tutti i dati nel recordset che costituisce l'argomento
restituito dalla funzione.
Siete arrivati fino a qui? La vostra pazienza vi fa onore ;-)
La domanda (le domande) a questo punto č (sono):
si puň adottare un approccio piů OO?
se si, quale struttura dovrebbe avere?
ultima e fondamentale: ma tutto questo ha un senso?
Salutoni e ringraziamenti a coloro che aiuteranno in qualsiasi forma
(graditi anche gli invii di generi alimentari, ma per favore non il tacchino
lesso di java)
Sergio

recordset.
Domanda, perché non usi HTML DOM?
Ciao,
Moreno
-- 
sirri at morenosoft dot com
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------

 Domanda, perché non usi HTML DOM?
molto semplicemente perchè non so cosa è. Cercherò.
Grazie
Sergio

molto semplicemente perchč non so cosa č. Cercherň.
E' un modello ad oggetti per analizzare un documento HTML e come
struttura č simile al modello per la gestione degli XML. Questo lo
conosco piuttosto bene, ma quello HTML non piů di tanto (l'ho usato una
sola volta per gestire il contenuto di una pagina visualizzata in un
controllo webbrowser e modificare un XML Island a runtime), perň ci
provo:
Salva questa paginetta html come "C:\aaa.htm":
<html>
<head>
<title>prova</title>
</head>
<body>
<table>
	<tr>
		<td id="campo1">001</td>
		<td id="campo2">aaa</td>
		<td id="campo3">bbb</td>
	</tr>
	<tr>
		<td id="campo1">002</td>
		<td id="campo2">a1</td>
		<td id="campo3">b1</td>
	</tr>
</table>
</body>
</html>
Poi in un progetto vb, referenzia Microsoft HTML Object Library, quindi
esegui:
    Dim objHTMLDoc As HTMLDocument
    Dim objHTMLDoc1 As HTMLDocument
    Dim coll As IHTMLElementCollection
    Dim objHTMLTable As HTMLTable
    Dim objRow As HTMLTableRow
    Dim objCell As HTMLTableCell
 
    Set objHTMLDoc = New HTMLDocument
    Set objHTMLDoc1 = objHTMLDoc.createDocumentFromUrl("c:\aaa.htm", "")
    Do
        DoEvents
    Loop Until objHTMLDoc1.readyState = "complete"
 
    Set coll = objHTMLDoc1.documentElement.All.tags("table")
    Set objHTMLTable = coll.Item(0)
 
    For Each objRow In objHTMLTable.rows
        For Each objCell In objRow.cells
            MsgBox objCell.getAttribute("id") & " = " & _
		objCell.innerHTML
        Next
    Next
 
    Set objHTMLDoc = Nothing
    Set objHTMLDoc1 = Nothing
    Set objRow = Nothing
    Set objCol = Nothing
    Set coll = Nothing
    Set objHTMLTable = Nothing
Ecco, semplice semplice ma magari puň esser un punto di partenza.
Ripeto, questo modello ad oggetti non lo caonosco, per cui anche queste
quattro righe forse potevano esser scritte maglio...
