Newsgroup: it.comp.lang.c++
Titolo: Dati da excel

Salve a tutti, gente.
Avrei un piccolo problemino: come importo dei dati da un file excel?
Mi spiego: sono un utonto con un'infarinatura di base di C++. Il mio 
scopo è creare un programmino che faccia dei calcoli noiosi con 
interazioni e ho bisogno che prenda dei dati che ho scaricato in formato 
.xls. Come faccio?
Ai tempi dell'esame di informatica mi creai un piccolo promemoria:
#include <fstream.h>
   LETTURA DA FILE
     ifstream input_file;
     input_file.open("pippo.txt");
     input_file>>variabile;
     input_file.close();
   SCRITTURA SU FILE
     ofstream output_file;
     output_file.open("pluto.txt");
     output_file<<variabile;
     output_file.close();
Sono questi i comandi da utilizzare? E come gli dico che mi serve il 
dato in (C,132)?
Vanno bene anche dei riferimenti a risorse che trattano questo argomento 
in modo semplice e non troppo tecnico, in fondo sono sempre un niubbo ;-)
Grazie a tutti delle eventuali risposte.
Ciao
Casaubon

 .xls. Come faccio?
Il file excel (.xls) e' in formato binario, cioe' non e' del semplice testo
che puoi leggere con le funzioni che hai scritto piu' giu'. Per avere
un'idea e capire come e' strutturato il file, 
www.wotsit.org
 (il file excel
e' in 
http://www.wotsit.org/search.asp?page=2&s=database
Puoi sempre esportare il file in formato testo, in modo da rendere la
lettura piu' semplice (basta FILE->SALVA CON NOME->TIPO FILE: TESTO txt. Su
un file .txt puoi usare il metodo di cui parlavi.
-- 
Arch Stenton

 
Perň mi sembra che il metodo che ho postato accede ai dati in maniera 
sequenziale e non selettiva, come servirebbe a me :-(
Dopo controllo il sito.
Grazie mille
Casaubon
P.S: e se creassi un database con access sarebbe piů semplice?

 P.S: e se creassi un database con access sarebbe piů semplice?
No, e' sempre binario. Le soluzioni possibili (da niubbio quale sono anche
io), sempre rimanendo in programmazione NON-windows c++, sono:
- salvi i dati in un file di testo e poi li leggi sequenzialmente (semplice
e rapido da fare). Se i campi hanno larghezza fissa, puoi leggerli anche in
maniera non sequenziale "saltando" al dato che ti interessa.
- ti studi il formato xls e ti scrivi una funzione per aprire il file e
leggere i dati in binario (e ad accesso casuale)
- cerchi qualche libreria gia' scritta che faccia questo lavoro
Aggiungo: ma sei sicuro che non ti basti il Visual Basic for Application di
Excel, per quello che devi fare?
-- 
Arch Stenton

 Excel, per quello che devi fare?
E' che ho OpenOffice e non ms Office :-(
Vabbé, grazie mille.
Casaubon

E' che ho OpenOffice e non ms Office :-(
Perche' non usi il formato CSV?

 E' che ho OpenOffice e non ms Office :-(
:-(
-- 
Arch Stenton

 Casaubon
Potenzialmente potresti usare il framework UNO di OOo, oppure scrivere 
una macro in VB di OOo. Sul sito di Openoffice trovi tutto quello che ti 
puň servire. Altrimenti puoi salvere il file in ODT, scompattarlo (č un 
semplice archivio zip) e quindi utilizzare i file xml che trovi
Ciao

 
Quindi hai semplicemente una relazione 1 a 1 (sostanza, costanti)?
Queste costanti come sono strutturate?
Io ti consiglio SQLite oppure una semplice implementazione di un albero 
binario (vedi la libreria bsdb della sleepy cat).
Entrambi multi piattaforma e bsdb ha anche una interfaccia C++.
Saluti  Manlio Perillo

Allora, il problema è questo:
+ di 450 composti chimici e, per ognuno, 10/15 costanti
I calcoli che devo fare sono equazioni e sistemi al massimo risolvibili 
con iterazioni.
Il programmino è personale, al limite da distribuire free sul p2p o agli 
amici.
Forse la soluzione migliore è crearmi 450 array o, meglio, una tabella 
direttamente in C++ e fargli fare tutti i conticini su dati riesedenti 
in RAM (Random Access Memory = 
Accedo_a_tutto_quello_che_mi_pare_quando_voglio ;-p ).
Magari non è prorpio ortodosso (anzi, non lo è per nulla!) ma il mio 
livello è quello di un corso di informatica a ingegneria chimica...
Il programma più complesso che ho fatto calcolava il determinante di una 
matrice quadrata di ordine n (e ne sono orgoglioso!)
Dato il livello scarsino, vi ringrazio di tutte le risorse che mi avete 
postato, ma a meno che non siano l'implementazione e la *semplice* 
utilizzazione di funzioni già scritte, penso sia un po' troppo complesso.
Che ne dite della soluzione? Consigli?
Appena posso controllo anche i siti che mi avete indicato.
Grazie ancora a tutti
Casaubon
P.S: Magari l'anno prossimo, che studierò MatLab lo farò come file .m e 
immagino sia moooolto più semplice, ma ora lo sfizio e C++ ;-)



E ti lamenti pure?
Usa starBasic o, per cose complicate, l'UDK con UNO.
Meglio di così!
Per le macro : 
http://www.ooomacros.org/
-- 
Matteo Settenvini
FSF Associated Member
Email : 
mat...@member.fsf.org
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d--(-) s+:- a-- C++ UL+++
P?>++ L+++>$ E+>+++ W+++ N++ o?
w--- O- M++ PS++ PE- Y+>++
PGP+++ t+ 5 X- R tv-- b+++ DI+
D++ G++ e h+ r-- y?
------END GEEK CODE BLOCK------

 immagino sia moooolto piů semplice, ma ora lo sfizio e C++ ;-)
Magari no, oppure magari MatLab ti fa credere che e' semplice, ma non lo 
e'...
Saluti  Manlio Perillo

 Saluti  Manlio Perillo
Grazie e ciao
Casaubon

 
Ricorda che quello che vede il database e' solo un buffer di bytes.
Quindi, se hai un vettore di floats, devi decidere come serializzarli 
(convertirli in bytes per essere poi in grado di ricostruire l' oggetto 
originale).
Saluti  Manlio Perillo

 originale).
Ovvero non basta scriverli dentro e basta? Mado' :-(
Vabbé, studierò un po': penso di aver scocciato fin troppo ;-)
Grazie.
ciao
Casaubon

 Ovvero non basta scriverli dentro e basta? Mado' :-(
Dipende da *cosa* scrivi.
La questione e' abbastanza importante che andrebbe discussa a parte.
Per adesso fai come ti suggerisce l'istinto e se hai problemi chiedi 
aiuto. :-)
Saluti  Manlio Perillo

 
Qualcosa mi dice che farň cosě ;-)
Grazie mille per l'aiuto. A risentirci.
Casaubon