PDA

View Full Version : [C++] Confronto tra file xls e ASCII


Andy1984
01-06-2010, 11:39
Ciao a tutti!

Volevo sapere se era possibile realizzare un programmino in C++ che abbia il compito di effettuare un confronto tra i dati contenuti in un file .xls ed un altro file formato ASCII. In pratica il programma deve verificare che i dati contenuti nei due file siano uguali e se fossero diversi deve dare un messaggio di errore.

é possibile farlo in C++?

Qualche suggerimento?

Grazie in anticipo a chiunque possa a aiutarmi.

recoil
01-06-2010, 12:21
in pratica vuoi confrontare un file excel nel suo formato standard con un CSV?
mi sa che ti conviene dare un'occhiata a come fa openoffice ad aprire un file excel

Andy1984
01-06-2010, 13:14
in pratica vuoi confrontare un file excel nel suo formato standard con un CSV?
mi sa che ti conviene dare un'occhiata a come fa openoffice ad aprire un file excel

Si in pratica vorrei confrontare i valori contenuti in una tabella excel con valori di variabili contenute in un file ascii. Non ho capito cosa vuoi dire...

Si potrebbe fare un programmino in C++ che riesca a fare questo in automatico?

fero86
01-06-2010, 13:30
in pratica vuoi confrontare un file excel nel suo formato standard con un CSV?
mi sa che ti conviene dare un'occhiata a come fa openoffice ad aprire un file excel fa cosi:
http://msdn.microsoft.com/en-us/library/cc313154(v=office.12).aspx

senza che sta ad impazzire sul codice di OOo.

fero86
01-06-2010, 13:32
ah, comunque Excel mette a dispozione degli oggetti COM per la manipolazione dei documenti, quindi se il programma verrá sicuramente eseguito su una macchina su cui é installato Excel non é necessario interpretare il formato XLS.

nuovoUtente86
01-06-2010, 13:53
Al limite puoi accedere ai dati del foglio excel attraverso ODBC.

Andy1984
01-06-2010, 13:58
ok grazie a tutti! Però il fatto è che devo implementare il codice in C++ per forza perchè il prof della Tesi mi ha detto che vuole il codice.

Fero86 il link che mi hai dato cos'è?

Non capisco di che si tratta...

nuovoUtente86
01-06-2010, 14:05
è la struttura del formato utilizzato da excel, se tu volessi accederci a livello binario. La cosa più comoda è manipolare i dati a più alto livello, cosa che puoi fare benissimo in C++.

Andy1984
01-06-2010, 14:20
è la struttura del formato utilizzato da excel, se tu volessi accederci a livello binario. La cosa più comoda è manipolare i dati a più alto livello, cosa che puoi fare benissimo in C++.

a ok ho capito! Grazie!

Come potrei strutturare il programma secondo voi?

Siccome sono due tabelle da confrontare una in formato xls ed una csv, potrei fare due matrici e confrontare i valori all'interno delle matrici?

Come si fa però a confrontare due matrici in C++?

recoil
01-06-2010, 15:01
fa cosi:
http://msdn.microsoft.com/en-us/library/cc313154(v=office.12).aspx

senza che sta ad impazzire sul codice di OOo.

ah non sapevo che ci fossero le specifiche così dettagliate del formato, buono a sapersi anche se non penso che mi metterò mai a scrivere un parser di file excel :D

Andy1984
01-06-2010, 15:39
qualche suggerimento?

fero86
02-06-2010, 01:36
ah non sapevo che ci fossero le specifiche così dettagliate del formato, buono a sapersi anche se non penso che mi metterò mai a scrivere un parser di file excel :D le specifiche dei formati di Office ormai da un po' di tempo sono tutte aperte perché Microsoft é stata costretta per vie legali :p
OOo e altri programmi non si basano piu sul reverse engineering.



qualche suggerimento? se sei sicuro che Excel potrá essere/sará installato su tutte le macchine su cui il programma dovrá mai girare, usa gli oggetti COM esposti da Excel. se non sei costretto a usare C++ usa JScript, VBScript oppure crea un RCW e accedi da .NET (quindi usando C# o Visual Basic).

purtroppo non sono in grado di fornirti un reference degli oggetti esposti da Excel, non ho Office installato perché non sono un pirata e ho il portafogli sgonfio (a malapena riesco a pagarmi la palestra l'anno prossimo).

DanieleC88
02-06-2010, 02:21
Se il linguaggio non è un problema, passa a Java ed usare Apache POI (http://poi.apache.org/). :p

fero86
02-06-2010, 08:35
Se il linguaggio non è un problema, passa a Java ed usare Apache POI (http://poi.apache.org/). :p in questo caso io ricorrerei ad una libreria third-party solo se non ci fosse la possibilitá di usare il materiale first-party :D ossia gli oggetti COM esposti da Excel; in altre parole userei quella roba solo se non potessi fare l'assunzione che Excel sia presente ovunque girerá il programma.

altrimenti non vedo ragione di accollarsi una dipendenza e di scegliere un linguaggio da compilare quando si puó risolvere in un pomeriggio con due righe di script messe in croce in Blocco Note e salvate con estensione .js o .vbs

non credo che per Andy1984 sia un problema procurarsi il reference degli oggetti esposti da Excel perché naturalmente, lui che deve fare questo lavoro per la tesi, avrá sicuramente una licenza legale del programma.

@Andy1984: quegli oggetti credo che siano gli stessi esposti in VBA che puoi usare per programmare le macro. disclaimer: non ho una copia di Office tipo dal 1997, per quanto ne so io le macro potrebbero non scriversi neanche piu in VBA :asd: :asd:
degli oggetti COM esposti peró sono sicuro, ve ne sono ancora parecchi riferimenti in MSDN.

DanieleC88
02-06-2010, 14:46
in questo caso io ricorrerei ad una libreria third-party solo se non ci fosse la possibilitá di usare il materiale first-party :D
Ah su questo sono perfettamente d'accordo con te, ma devo ammettere che POI è facilissimo da usare, ben documentato e, soprattutto, è tutto codice Java... e quindi funziona ovunque. :D

cionci
03-06-2010, 09:44
http://www.codeproject.com/KB/office/BasicExcel.aspx (apre direttamente Excel in formato binario)
http://support.microsoft.com/kb/216686
http://www.libxl.com/home.html (se ti basta quella con le limitazioni)

DanieleC88
03-06-2010, 12:30
http://www.codeproject.com/KB/office/BasicExcel.aspx (apre direttamente Excel in formato binario)
Non vorrei sbagliarmi, ma mi sembra che questo BasicExcel fosse proprio quello in cui ero incappato anche io prima di passare a Java+POI, e mi sembra di ricordare che avesse delle grosse difficoltà ad esempio a leggere celle contenenti delle date e distinguerle da altre contenenti numeri formattati... :)

cionci
03-06-2010, 12:59
Non vorrei sbagliarmi, ma mi sembra che questo BasicExcel fosse proprio quello in cui ero incappato anche io prima di passare a Java+POI, e mi sembra di ricordare che avesse delle grosse difficoltà ad esempio a leggere celle contenenti delle date e distinguerle da altre contenenti numeri formattati... :)
C'è anche questo che è il continuo: http://www.codeproject.com/KB/office/ExcelFormat.aspx

Andy1984
03-06-2010, 13:48
Ok grazie a tutti!

Una cosa che non c'entra... sapete indicarmi dove posso trovare in rete (magari in pdf) un manuale di Visual C++ 2008 Express Edition?

Grazie ancora!

fero86
03-06-2010, 21:40
Ok grazie a tutti!

Una cosa che non c'entra... sapete indicarmi dove posso trovare in rete (magari in pdf) un manuale di Visual C++ 2008 Express Edition?

Grazie ancora! questo puó essere utile? http://msdn.microsoft.com/en-us/library/60k1461a(v=VS.90).aspx

Andy1984
04-06-2010, 14:07
Ma il comando this-> in C++ a cosa serve?

DanieleC88
04-06-2010, 14:16
Ad accedere a campi della specifica istanza dell'oggetto su cui lavori. Solitamente è implicito, può tornare utile quando avresti collisioni di nomi e vuoi esplicitare a quale fai riferimento.

Andy1984
09-06-2010, 10:25
Per leggere un file .xls con visual ho visto che c'è la possibilità di usare l'Interopt con visual c++... lo conoscete?

Sapete come utilizzarlo?

Da quanto ho capito riesce a manipolare i file .xls....

Non è che potreste indicarmi una guida su come utilizzarlo? Ho visto in rete ma c'è materiale confusonario!:muro:

Grazie in anticipo

cionci
09-06-2010, 10:44
Ma non ti basta la roba che ti abbiamo postato ?

Andy1984
09-06-2010, 13:10
Ma non ti basta la roba che ti abbiamo postato ?

Si ma la mia difficoltà è utilizzare la xlsstream, volevo sapere se qualcuno poteva illustarmi un esempio di applicazione o indicarmi qualche sito in rete perchè io non ho trovato esempi.

Andy1984
09-06-2010, 14:22
ho trovato quello che cercavo... c'è anche il file pdf!
Posto il link così se dovesse servire a qualcuno...

Grazie cmq!

http://members.wibs.at/herz/xlsstream/www/index.html

Andy1984
10-06-2010, 17:09
Ragazzi scusate se vi rompo le scatole ma sto impazzendo!:muro:

Potreste postarmi un esempio di codice da cui prendere spunto.

Ad esempio io ho un file .xls che contiene:

Pippo 3
Pluto 2

e quello ASCII che contiene:

Pippo=3
Pluto=2

Devo fare il confronto tra i due file con un programmino in C++ (utilizzando Visual C++ 2008).

Ho provato utilizzando l'articolo che avevo postato in precedenza ma non ci sono riuscito.:cry:
:help: :help: :help: :help:

Grazie

Andy1984
11-06-2010, 14:01
Ragazzi scusate se vi rompo le scatole ma sto impazzendo!:muro:

Potreste postarmi un esempio di codice da cui prendere spunto.

Ad esempio io ho un file .xls che contiene:

Pippo 3
Pluto 2

e quello ASCII che contiene:

Pippo=3
Pluto=2

Devo fare il confronto tra i due file con un programmino in C++ (utilizzando Visual C++ 2008).

Ho provato utilizzando l'articolo che avevo postato in precedenza ma non ci sono riuscito.:cry:
:help: :help: :help: :help:

Grazie

Nessuno che mi possa dare un aiuto?!

Andy1984
14-06-2010, 16:51
Ok ragazzi mi sono sbloccato....

Ora mi servirebbe una cosa che in rete non ho trovato.

Sto utilizzando Visual C++ 2008 e devo inserire una toolstripprogressbar però sulla casella degli strumenti c'è solo la progressbar.

Come si fa ad inserirla?

Grazie in anticipo