PDA

View Full Version : [C/C++] C'è 1 funzione di libreria che fa il pattern matching?!


Matrixbob
22-11-2006, 11:34
C'è solo strcmp?!
Qualcosa giò portato verso il pattern matching RSS/XML?!

Mi han detto di usare queste:
http://www.xmlsoft.org/

, ma ad essere sincero NON ci capisco nulla di come si usano e di cosa dovrei scaricare.

Quindi chiedo se c'è qualcosa di meno soft e + terraterra da usare.

andbin
22-11-2006, 11:44
C'è solo strcmp?!
Qualcosa giò portato verso il pattern matching RSS/XML?!Parlando a livello di librerie "standard" non ci sono funzioni per le regular-expression e nemmeno funzioni più avanzate per il parsing di file. Per queste cose ci si deve rivolgere a librerie esterne specifiche.

Mi han detto di usare queste:
http://www.xmlsoft.org/

, ma ad essere sincero NON ci capisco nulla di come si usano e di cosa dovrei scaricare.È una delle possibili librerie per il parsing di file XML. Io ho già avuto modo di usarla per un progetto in "C" su Windows. A te servirebbe usarla su Windows o Linux?

Matrixbob
22-11-2006, 11:52
È una delle possibili librerie per il parsing di file XML. Io ho già avuto modo di usarla per un progetto in "C" su Windows. A te servirebbe usarla su Windows o Linux?
Cavolo fa differenza?!
Se devo scegliere dico Windows perchè l'ho impostato con tutto il suo MinGW nuovo nuovo. :)

Matrixbob
22-11-2006, 11:57
Io penso che di queste librerie potrebbe interessarmi la voce:

xmlstring
xmlautomata
xmlerror
xmlreader
xmlregexp
xmlsave
xmlwriter

, ma prendendoli da "Table of Contents" non so effettivamente cosa siano. :fagiano:

[SCOPO]
è quello di leggere da 1 file.rss scaricato e manipolarne i dati per infilarlo in 1 file d'altro tipo, diciamo 1 TXT ad esempio.
Questo però lo si può risolvere facendo delle fprintf di stringhe concatenate includenti anche il dato parsato, giusto?! :confused:

andbin
22-11-2006, 12:00
Cavolo fa differenza?!Beh, non nelle funzionalità della libreria ... più che altro per quello che devi scaricare/installare.

Se devo scegliere dico Windows perchè l'ho impostato con tutto il suo MinGW nuovo nuovo. :)Ok, allora vai <qui> (ftp://xmlsoft.org/libxml2/win32/) e scarica i pacchetti Win32 di queste librerie:
- libxml2
- iconv
- zlib

Io le usate con il VC++ ... non vorrei che con il MinGW ci fossero problemi per il solito casino del formato delle librerie .lib.

Matrixbob
22-11-2006, 21:33
Beh, non nelle funzionalità della libreria ... più che altro per quello che devi scaricare/installare.
OK altro punto debole, non ho mai usato librerie non STD se non quelle fatte da me e lasciate nella cartella del programma principale. :)

Quindi ho proceduto per istinto e buon senso, ma senza esperienza, ho scaricato:

libxml2-2.6.23.win32
zlib-1.2.3.win32
iconv-1.9.1.win32


come capito dal UNICO readme trovato in:
libxml2-2.6.23.win32


This is libxml2, version 2.6.23, binary package for the native Win32/IA32
platform.

The files in this package do not require any special installation
steps. Extract the contents of the archive whereever you wish and
make sure that your tools which use libxml2 can find it.

For example, if you want to run the supplied utilities from the command
line, you can, if you wish, add the 'bin' subdirectory to the PATH
environment variable.
If you want to make programmes in C which use libxml2, you'll
likely know how to use the contents of this package. If you don't, please
refer to your compiler's documentation.

If there is something you cannot keep for yourself, such as a problem,
a cheer of joy, a comment or a suggestion, feel free to contact me using
the address below.


Ho fatto che mettere i contenuti delle cartelle BIN dei 3 file scaricati (cioè files.EXE e files.DDL) nella cartella BIN di MinGW perchè era già inserita nel variabile d'ambiente "PATH" e perchè non ne vedevo controindicazioni.

I contenuti delle cartelle INCLUDE li ho messi nella cartella INCLUDE del mio "workspace" di programmazione.

I contenuti delle cartelle LIB non sapevo che farne ed allora non li ho ancora messi da nessuna parte. :D

andbin
22-11-2006, 21:47
Ho fatto che mettere i contenuti delle cartelle BIN dei 3 file scaricati (cioè files.EXE e files.DDL) nella cartella BIN di MinGW perchè era già inserita nel PATH e perchè non ne vedevo controindicazioni.

I contenuti delle cartelle INCLUDE li ho messi nella cartella INCLUDE del mio "workspace" di programmazione.

I contenuti delle cartelle LIB NON sapevo che farne ed allora non li ho ancora messi da nessuna parte. :DInnanzitutto non è necessario che sposti chissà dove tutti i file.

In quei pacchetti ci sono 3 cose che servono:

a) I file di include (.h). Devi configurare il tuo compilatore/ambiente di sviluppo in modo che tra i suoi path di include ci sia la/e directory dove ci sono questi include esterni.

b) I file di libreria (.lib). Nota che c'è una xxx.lib e una xxx_a.lib. La prima è una import library che ti permette di "agganciarti" alla DLL della relativa libreria. La seconda è una libreria "statica", non hai più bisogno della DLL. Vedi tu cosa è meglio. Devi configurare il tuo compilatore/ambiente di sviluppo in modo che tra i suoi path di "include delle librerie" ci sia la/e directory dove ci sono questi file .lib.
Nel "progetto" della tua applicazione dovrai poi "istruire" il linker specificandogli di effettuare il link con la/e libreria specifica che ti serve.

c) La DLL, solo se usi la import library. In tal caso le DLL le potresti mettere in C:\WINDOWS ... insomma, basta che siano in PATH.

Matrixbob
22-11-2006, 22:00
Avete mica esperienza od idea di come si usino?!

Es:

...
..
fp_xml = fopen("file_rss.xml", "r");
qualcosa = nome_funzione(fp_xml, TAG);
..
...


:confused: :mbe: :confused:
Mi sa che sono fuori strada .... :p

con Java 1 mio amico usava queste librerie:

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

e faceva cose del tipo:

Element rootElement = xmlDocTmp.getRootElement();
nextElement.getName().equals("Sequenza");
dato_xml=nextElement.getAttributeValue("Att7");

Di Java so proprio poco. :(

Qui col C non potete fare ancora lo sforzo di darmi 1 mano?!
Io vedo cosa riesco a scoprire ...

andbin
22-11-2006, 22:20
Avete mica esperienza od idea di come si usino?!Io un pochino. Per lavoro avevo fatto un software in linguaggio "C" che usa la libxml.

Es:

...
..
fp_xml = fopen("file_rss.xml", "r");
qualcosa = nome_funzione(fp_xml, TAG);
..
...


:confused: :mbe: :confused:
Mi sa che sono fuori strada .... :pEh, sì, direi abbastanza.

Per effettuare il parsing di un file XML ci sono, in generale, 2 tecniche, denominate con i termini SAX e DOM.

Usando l'approccio SAX, tu passi i dati del file alla libreria e lei man mano che incontra l'inizio o la fine di un tag o incontra dei blocchi di testo, ecc... ti chiama delle funzioni di "callback" che ti informano della cosa (e poi farai tu quello che vuoi).

Usando l'approccio DOM, tu passi i dati del file alla libreria e lei tira fuori un unico grande "albero" di nodi mantenuto in memoria e che tu poi puoi scansionare avanti, indietro, di su, di giù come vuoi per reperire cosa ti serve.

Nel software che avevo sviluppato se ben mi ricordo avevo usato il DOM, tanto avevo dei file XML abbastanza piccoli. Ma ti posso dire qualcosa di più e magari postare del codice domani.

Matrixbob
22-11-2006, 22:33
Per effettuare il parsing di un file XML ci sono, in generale, 2 tecniche, denominate con i termini SAX e DOM.

Usando l'approccio SAX, tu passi i dati del file alla libreria e lei man mano che incontra l'inizio o la fine di un tag o incontra dei blocchi di testo, ecc... ti chiama delle funzioni di "callback" che ti informano della cosa (e poi farai tu quello che vuoi).

Usando l'approccio DOM, tu passi i dati del file alla libreria e lei tira fuori un unico grande "albero" di nodi mantenuto in memoria e che tu poi puoi scansionare avanti, indietro, di su, di giù come vuoi per reperire cosa ti serve.

Nel software che avevo sviluppato se ben mi ricordo avevo usato il DOM, tanto avevo dei file XML abbastanza piccoli. Ma ti posso dire qualcosa di più e magari postare del codice domani.
:uh:
:ave: 6 1 pozzo di sapere!
Buona :ronf:.

[PS]
@all:
se esiste della ducumentazione esaustiva e di facile comprensione online, allora potete girarmi anche qualche link così eviterò di fare domande sempre + stupide.
TNX.

Matrixbob
23-11-2006, 13:11
Innanzitutto non è necessario che sposti chissà dove tutti i file.

In quei pacchetti ci sono 3 cose che servono:

a) I file di include (.h). Devi configurare il tuo compilatore/ambiente di sviluppo in modo che tra i suoi path di include ci sia la/e directory dove ci sono questi include esterni.

b) I file di libreria (.lib). Nota che c'è una xxx.lib e una xxx_a.lib. La prima è una import library che ti permette di "agganciarti" alla DLL della relativa libreria. La seconda è una libreria "statica", non hai più bisogno della DLL. Vedi tu cosa è meglio. Devi configurare il tuo compilatore/ambiente di sviluppo in modo che tra i suoi path di "include delle librerie" ci sia la/e directory dove ci sono questi file .lib.
Nel "progetto" della tua applicazione dovrai poi "istruire" il linker specificandogli di effettuare il link con la/e libreria specifica che ti serve.

c) La DLL, solo se usi la import library. In tal caso le DLL le potresti mettere in C:\WINDOWS ... insomma, basta che siano in PATH.
Ehh tu si che sei molto teorico :O , io dato che non so configurare MinGW e non so dove trovare le istruzioni per poterlo fare, allora mi sono limitato a fare così:

1]
Ho cercato il file stdio.h, una volta individuata la cartella in cui è ho anche aggiunto i nuovi file.h dei 3 file scaricati e scompattati.
Cioè qui:
C:\MinGW\include

Usarei le:
xxx_a.lib

, ma nel file:
zlib-1.2.3.win32

ho solo:
zdll.lib
zlib.lib

Poi ho provato a fare 1 compilazione di questo:

#include "es.h"
#include "parser.h"

int main(int argc, char *argv[])
{

printf("Ciao!\n");

return 1;
}

Dove es.h è questo:

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>

ed il compilatore effettivamente NON sa dove trovare parser.h.
Se lo metto nella stessa directory del programma invece compila.

Invece io i LIB non li ho ancora messi da nessuna parte, solo i BIN. :stordita:

Bisognerebbe usare quelle librerie x vedere se sono correttamente installate IMHO, ma non so come usarle.
Se il codice Andrea preferisci girarmelo in PVT fai pure.
TNX.

andbin
23-11-2006, 13:33
Se vai a vedere <qui> (http://www.xmlsoft.org/examples/index.html), vengono presentati diversi esempi di utilizzo, abbastanza semplici. Guarda ad esempio tree1.c.

Adesso vedo di riprendere in mano quel progetto che avevo fatto e scrivo magari un esempio semplice.

Matrixbob
24-11-2006, 13:42
Se vai a vedere <qui> (http://www.xmlsoft.org/examples/index.html), vengono presentati diversi esempi di utilizzo, abbastanza semplici. Guarda ad esempio tree1.c.

Adesso vedo di riprendere in mano quel progetto che avevo fatto e scrivo magari un esempio semplice.
OK grazie, sto PM ci lavoro sopra.

Hai visto l'ultimo problema d'installazione che ho riportato sopra?!
Mi puoi dire qualcosa anche li per favore?!
Grazie.

andbin
24-11-2006, 13:53
Hai visto l'ultimo problema d'installazione che ho riportato sopra?!Cioè quale di preciso???

Matrixbob
24-11-2006, 13:58
Cioè quale di preciso???
Wow che velocità! Spero che mangi ogni tanto! :sofico: :D

Ancora l'installazione delle librerie principalmente, in riferimento q questi:
POST 07 (http://www.hwupgrade.it/forum/showpost.php?p=14800180&postcount=7)
POST 11 (http://www.hwupgrade.it/forum/showpost.php?p=14807125&postcount=11)

andbin
24-11-2006, 14:07
Ancora l'installazione delle librerie principalmente, in riferimento q questi:
POST 07 (http://www.hwupgrade.it/forum/showpost.php?p=14800180&postcount=7)
POST 11 (http://www.hwupgrade.it/forum/showpost.php?p=14807125&postcount=11)Guarda ... come ho detto non devi spostare tutto chissà dove. Per le DLL puoi spostarle nella directory di Windows o se vuoi puoi aggiornare la variabile di ambiente PATH in modo che contenga i path di dove le hai messe.

Per include/librerie è diverso. Tu dici che stai usando MinGW ma lo stai usando da linea di comando o da un qualche ambiente di sviluppo??

Basta impostare le opzioni per aggiungere un path di ricerca per gli include e per le librerie. Se lo usi da linea di comando, per gcc c'è l'opzione -I, per ld c'è l'opzione -L.

Matrixbob
24-11-2006, 14:23
Tu dici che stai usando MinGW ma lo stai usando da linea di comando o da un qualche ambiente di sviluppo??
Dal prompt dei comandi di Win.

Basta impostare le opzioni per aggiungere un path di ricerca per gli include e per le librerie. Se lo usi da linea di comando, per gcc c'è l'opzione -I, per ld c'è l'opzione -L.
per ld?!
.. è questo "basta impostare" che mi frega.
Aggiungere al PATH variabile d'ambiente so come si fa, ma qui non parliamo di quello.
Qui aggiungiamo alla variabile di PATH di GCC, mi pare d'aver capito.

Quindi:
> gcc -i unità:\dir\dir\file.h
:confused: :mbe: :confused:

andbin
24-11-2006, 14:27
Quindi:
> gcc -i unità:\dir\dir\file.h
:confused: :mbe: :confused:Una cosa del tipo:

gcc -IC:\Programmi\libxml2\include -IC:\Programmi\iconv\include -c -o pippo pippo.c

Forse è meglio se usi un bel Makefile.

Matrixbob
24-11-2006, 14:57
Una cosa del tipo:

gcc -IC:\Programmi\libxml2\include -IC:\Programmi\iconv\include -c -o pippo pippo.c

Forse è meglio se usi un bel Makefile.
OK.

Il contenuto di BIN cioè files EXE & DLL li butto in SYSTEM32 ... e ...
... e con i "file.lib" cosa hai detto di farci già?! :stordita: :fagiano:

[PS]
Tieni conto che in:
zlib-1.2.3.win32

non ho quei "XXX_a.lib".

andbin
24-11-2006, 15:00
... e con i file.lib cosa hai detto di farci già?!Una cosa del tipo: ... -LC:\Programmi\libxml2\lib -L.... -llibxml2.lib -l....