Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: doublemm - 24 Maggio 2010, 15:34:00

Titolo: [RISOLTO] recuperare dati da un foglio excel
Inserito da: doublemm - 24 Maggio 2010, 15:34:00
riciao a tutti. Ho questo problema: sto scrivendo un programma di contabilità del mio bar. Il registratore di cassa (pc touch screen) alla sera mi esporta i dati in formato excel (poi posso salvarli in qualsiasi formato supportato da excel) in che formato posso salvarli e poi come posso leggerlo con gambas per importare i dati all'interno di una tabella in un database sqlite?
Titolo: Re: recuperare dati da un foglio excel
Inserito da: milio - 24 Maggio 2010, 16:26:01
secondo me ti conviene esportarli in formato csv...
e dopo lo elabori con la funzione Split
Titolo: Re: recuperare dati da un foglio excel
Inserito da: doublemm - 24 Maggio 2010, 17:27:09
ora mi documento sulla funzione split ne vedo se fa al caso mio
Titolo: Re: recuperare dati da un foglio excel
Inserito da: doublemm - 24 Maggio 2010, 17:35:49
ok potrebbe essere la via giusta mettere il file csv in un array tramite la funzione split e poi lavorarla per creare la mia tabella. Ignoro però come caricare il file.csv per poi splittarlo
Titolo: Re: recuperare dati da un foglio excel
Inserito da: ealmuno - 24 Maggio 2010, 18:48:18
credo devi farlo manualmente, apri il file excel e da li lo salvi con file-->salva con nome-->nomefile.csv
poi lo prendi con gambas. Per fare tutto con gambas non saprei, forse puoi farlo usando qualche comando da terminale.
Ma stiamo parlando di Excel (quello di microsoft) oppure di calc di openoffice?
Titolo: Re: recuperare dati da un foglio excel
Inserito da: doublemm - 24 Maggio 2010, 19:58:14
ok potrebbe essere la via giusta mettere il file csv in un array tramite la funzione split e poi lavorarla per creare la mia tabella. Ignoro però come caricare il file.csv per poi splittarlo

ok come avevo detto da excel salvo un csv e poi come lo carico in gambas per splittarlo?
Titolo: Re: recuperare dati da un foglio excel
Inserito da: ealmuno - 24 Maggio 2010, 20:11:29
a mio parere puoi caricare ogni riga del file in una stringa e poi usare la funzione split. Oppure caricare tutto il file in un'unica stringa. Ma di sicuro sapranno consigliarti di meglio gli altri ;D.
Qua puoi vedere come gestire i file : http://gambasdoc.org/help/comp/gb/file (http://gambasdoc.org/help/comp/gb/file)
Titolo: Re: recuperare dati da un foglio excel
Inserito da: milio - 24 Maggio 2010, 20:58:07
In linea di massima si fa cosi'

Codice: [Seleziona]
PRIVATE SUB Recuperocsv()
DIM f AS String
DIM rec AS String[]
DIM s AS String[]

  f = File.Load("path_tuo_file.csv")

  rec = Split(f, "/n", "", TRUE) 'Split dell'intero file dove trova un ritorno a capo
  FOR EACH f IN rec
    s = Split(f, ";")
    ' In questa parte di codice fai in modo di inserire i dati nella tua GridView
  NEXT

END

L'unica cosa e' che devi fare attenzione a non inserire nel file csv, tipo delle descrizioni con il ritorno a capo, altrimenti la variabile rec ti viene sfalsata.

Titolo: Re: recuperare dati da un foglio excel
Inserito da: doublemm - 24 Maggio 2010, 22:16:38
ho provato a fare questo

Codice: [Seleziona]
PUBLIC SUB Form_Open()

DIM f AS String
DIM rec AS String[]
DIM s AS String[]
DIM i AS Integer = 0
DIM j AS Integer = 0

  f = File.Load("/home/matteo/Scrivania/Gestionale/CAMIGest/Archivio Cassa/2genn.csv")
 
  rec = Split(f, "/n", "", TRUE) 'Split dell'intero file dove trova un ritorno a capo
 
  GridView1.mode = Select.Multiple
  GridView1.Columns.Count = 4
  GridView1.Rows.Count = rec.Count
 
  FOR EACH f IN rec
    s = Split(f, ";")
    TextArea1.Text = s[j]
    GridView1[i, 0].Text = s[j]
    INC j
    GridView1[i, 1].Text = s[j]
    INC j
    GridView1[i, 2].Text = s[j]
    INC j
    GridView1[i, 3].Text = s[j]
    INC j
    INC i
   
    ' In questa parte di codice fai in modo di inserire i dati nella tua GridView
  NEXT


END

ma mi da out of bounds alla riga

Codice: [Seleziona]
GridView1[i, 1].Text = s[j]
Titolo: Re: recuperare dati da un foglio excel
Inserito da: Golia - 24 Maggio 2010, 23:04:48
Per importare ed esportare file csv in gambas MD9327 ha fatto una classe che trovi nell'area download, si chiama
Citazione
Pgcsv Class
Titolo: Re: recuperare dati da un foglio excel
Inserito da: milio - 24 Maggio 2010, 23:20:38
PUBLIC SUB Form_Open()

DIM f AS String
DIM rec AS String[]
DIM s AS String[]
DIM i AS Integer = 0
DIM j AS Integer = 0

  f = File.Load("/home/matteo/Scrivania/Gestionale/CAMIGest/Archivio Cassa/2genn.csv")
 
  rec = Split(f, "/n", "", TRUE) 'Split dell'intero file dove trova un ritorno a capo
 
  GridView1.mode = Select.Multiple
  GridView1.Columns.Count = 4
  GridView1.Rows.Count = rec.Count
 
  FOR EACH f IN rec
    s = Split(f, ";")
    TextArea1.Text = s[j]
    GridView1[i, 0].Text = s[j]
    INC j
    GridView1[i, 1].Text = s[j]
    INC j
    GridView1[i, 2].Text = s[j]
    INC j
    GridView1[i, 3].Text = s[j]
    j=0
    INC i
   
    ' In questa parte di codice fai in modo di inserire i dati nella tua GridView
  NEXT


END
Titolo: Re: recuperare dati da un foglio excel
Inserito da: doublemm - 25 Maggio 2010, 00:40:00
sono riuscito ad inserire l'arrey nella grid solo che ho un problema. Quando salvo in csv mi chiede che separatore voglio usare e mi fa scegliere tra ' e ". se uso l'apice mi divide delle celle dovec'è scritto CAFFE' CORRETTO oppure CAFFE' MACCHIATO (per via dell'accento esportato come apice. Se uso " non so come inserirlo nell'istruzione SPLIT.

rec=split(string,?)

Titolo: Re: recuperare dati da un foglio excel
Inserito da: leo72 - 25 Maggio 2010, 09:20:46
I doppi apici sono CHR$(34).
Cmq in rete ho trovato xlhtml (http://freshmeat.net/projects/xlhtml/), un programmino che non converte solo da XCL aHTML ma anche in CVS.
Titolo: Re: recuperare dati da un foglio excel
Inserito da: doublemm - 25 Maggio 2010, 11:39:10
I doppi apici sono CHR$(34).
Cmq in rete ho trovato xlhtml (http://freshmeat.net/projects/xlhtml/), un programmino che non converte solo da XCL aHTML ma anche in CVS.

per la conversine non è un problema. Alla sera quando chiudo cassa si apre excel con il file da salvare e lo salvo in CVS. Ogni file generato devo accodarlo ad una tabella in un database sqlite per usarlo come statistica. Il file che devo accodare contiene informazioni tipo:

id       descrizione     qt       prezzo
200    CAFFE'             254    0.90

il problema è che delle volte sulla descrizione ho CAFFE' CORRETTO quindi se uso l'apice come separatore mi divide CAFFE da CORRETTO e mi sballa tutta la grid. potrei fare delle if per ogni descrizione che ha l'apice ma se uso le virgolette credo sia meglio.

dimmi se è corretto split(stringa, CHR$(34))

grazie mille, senza di voi non sarebbe possibile andare avanti.
Titolo: Re: recuperare dati da un foglio excel
Inserito da: Ceskho - 25 Maggio 2010, 16:42:11
I doppi apici sono CHR$(34).
Cmq in rete ho trovato xlhtml (http://freshmeat.net/projects/xlhtml/), un programmino che non converte solo da XCL aHTML ma anche in CVS.

per la conversine non è un problema. Alla sera quando chiudo cassa si apre excel con il file da salvare e lo salvo in CVS. Ogni file generato devo accodarlo ad una tabella in un database sqlite per usarlo come statistica. Il file che devo accodare contiene informazioni tipo:

id       descrizione     qt       prezzo
200    CAFFE'             254    0.90

il problema è che delle volte sulla descrizione ho CAFFE' CORRETTO quindi se uso l'apice come separatore mi divide CAFFE da CORRETTO e mi sballa tutta la grid. potrei fare delle if per ogni descrizione che ha l'apice ma se uso le virgolette credo sia meglio.

dimmi se è corretto split(stringa, CHR$(34))

grazie mille, senza di voi non sarebbe possibile andare avanti.

Innanzitutto 90 cent un caffè è un furto... :P

tornando a noi: gli apici possono essere inseriti grazie al carattere speciale di escape \...lo slash, infatti, serve a dire a gambas (ed ad altri linguaggi anche) che ciò che lo segue deve essere visto come quel carattere speciale....quindi le virgolette sono \"

Perciò la tua funzione sarà:

variabile_stringa = Split(Stringa_da_splittare, "\"")
Titolo: Re: recuperare dati da un foglio excel
Inserito da: doublemm - 25 Maggio 2010, 17:07:37
Citazione
Innanzitutto 90 cent un caffè è un furto... Linguaccia
naturalmente per quelli del forum il caffè è offerto ;D

Bene ho imparato anche il concetto del  "/ però adesso ho un altro problema. Ieri per fare le prove vonvertivo un xls in cvs da openoffice. Oggi al lavoro ho salvato direttamente da excel in cvs e mi crea il seguente file di testo

1;    caffè;                  254;       0.90
2;    macchiatone;     165;       1.00

non so come splittare il prezzo dall'ID della riga sucessiva
Titolo: Re: recuperare dati da un foglio excel
Inserito da: Ceskho - 25 Maggio 2010, 17:15:25
Se mi dici qual'è il tuo bar vengo volentieri... ;)

Preciso che lo slash si mette prima delle virgolette altrimenti non ne verrai mai a capo.

Per quanto riguarda lo split devi sapere che quando splitti una parola ottieni un array di stringhe divise secondo il carattere da te deciso...

Immagina di avere la stringa:

Codice: [Seleziona]
"quanto;è antipatico;fsurfing"

Se usi lo split con il carattere ; otterrai un array di tre elementi dove, nel nostro caso, l'elemento 0 (ovvero il primo) è dato da "quanto", l'elemento 1 (il secondo) da "è antipatico" e il terzo o elemento 2 da "fsurfing"

In questo modo se immaginiamo di chiamare la stringa di prima $Stringa, darai, ad esempio:

Codice: [Seleziona]
PRINT Split($Stringa, ";")[1]

e il terminale ti restituirà l'elemento 1, ovvero "è antipatico"

Con tale sistema puoi separare l'id dal prezzo moto facilmente....
Titolo: Re: recuperare dati da un foglio excel
Inserito da: doublemm - 25 Maggio 2010, 17:26:24
ok fin qui c'ero arrivado. Ho anche messo l'array in una grid. volendo paragonare il mio problema al tuo esempio:

stringa=split(testo,";")

dove testo lo ricavo da un file il quale contiene:

il;mio;caffè;costa;il;giusto
ma;se;passi;da;me;a;venezia;te;lo;offro

il risultato di stringa[5] è giustoma
Titolo: Re: recuperare dati da un foglio excel
Inserito da: Ceskho - 25 Maggio 2010, 17:51:41
In pratica tu vorresti separare la parola "giusto" da "ma"?

Se è così in pratica devi splittare nuovamente la tua parola però questa volta usando il ritorno a capo ("\n") come carattere di split....otterrai un array di due elementi: l'elemento 0 che è "giusto" e l'elemento 1 che è "ma"
Titolo: Re: recuperare dati da un foglio excel
Inserito da: doublemm - 25 Maggio 2010, 17:53:48
esattamente. pensavo ci fosse un modo per farlo in un unico split
Titolo: Re: recuperare dati da un foglio excel
Inserito da: Ceskho - 25 Maggio 2010, 17:57:56
esattamente. pensavo ci fosse un modo per farlo in un unico split
Purtroppo no.....o meglio un trucchetto c'è....

Prima di splittare la frase usi la funzione replace per rimpiazzare il carattere "\n" con ";"...in questo modo ogni volta che il testo va a capo viene sostituito da punto e virgola....però tieni presente che sostituisce OGNI "\n" con ";"...
Titolo: Re: recuperare dati da un foglio excel
Inserito da: ealmuno - 25 Maggio 2010, 18:01:24
sicuro lo salvi con \n e non con un altro carattere, io ho avuto problemi quando l'ho fatto con un file salvato con php
Titolo: Re: recuperare dati da un foglio excel
Inserito da: doublemm - 25 Maggio 2010, 18:42:36
mi scoppia la testa.

Codice: [Seleziona]
f = File.Load("/home/matteo/Scrivania/Gestionale/CAMIGest/Archivio Cassa/6 aprile.csv")
 
  ff = Replace$(f, "/n", ";")
  rec = Split(ff, ";", "", TRUE)
  TextArea1.text = ff

nella text area che ci metta f oppure ff non cambia nulla non ne vado più fuori
Titolo: Re: recuperare dati da un foglio excel
Inserito da: Berserker79 - 25 Maggio 2010, 19:37:25
Scusa, ma la per splittare ogni volta che il testo va accapo, devi usare "\n" e non "/n". Oppure mi sbaglio???
Titolo: Re: recuperare dati da un foglio excel
Inserito da: doublemm - 25 Maggio 2010, 19:43:14
hai ragione. ogni tanto mi sorprendo della mia ignoranza
Titolo: Re: recuperare dati da un foglio excel
Inserito da: leo72 - 25 Maggio 2010, 21:05:25
Esatto. Devi usare "\n", non "/n".
Titolo: Re: recuperare dati da un foglio excel
Inserito da: doublemm - 25 Maggio 2010, 23:01:07
ragazzi c'è l'ho fatta. Dopo mille peripezie sono riuscito a tenere la parte di file che mi serviva ed eliminare tutto il resto.

Devo dire grazie ancora a tutti senza di voi non ci sarei riuscito

PS. chissà che imparando ogni giorno qualcosa di nuovo non debba più disturbarvi !!!
Titolo: Re: recuperare dati da un foglio excel
Inserito da: Ceskho - 25 Maggio 2010, 23:29:43
Esatto. Devi usare "\n", non "/n".

Perchè nessuno fa come dico io.... :'( :'( :'(
Titolo: Re: recuperare dati da un foglio excel
Inserito da: doublemm - 25 Maggio 2010, 23:33:42
Esatto. Devi usare "\n", non "/n".

Perchè nessuno fa come dico io.... :'( :'( :'(

delle volte uno nella fretta immagazzina un informazione e fa mille tentativi. Nel mio caso stavo facendo come avevi detto tu ma non mi accorgevo di sbagliare la barra. cmq ce l'ho fatta grazie ai tuoi suggerimenti
Titolo: Re: recuperare dati da un foglio excel
Inserito da: Ceskho - 25 Maggio 2010, 23:35:40
Esatto. Devi usare "\n", non "/n".

Perchè nessuno fa come dico io.... :'( :'( :'(

delle volte uno nella fretta immagazzina un informazione e fa mille tentativi. Nel mio caso stavo facendo come avevi detto tu ma non mi accorgevo di sbagliare la barra. cmq ce l'ho fatta grazie ai tuoi suggerimenti

Si, scherzavo ovviamente... ;)
Titolo: Re: [RISOLTO] recuperare dati da un foglio excel
Inserito da: doublemm - 25 Maggio 2010, 23:39:41
comunque funziona sia con
Codice: [Seleziona]
ff = Replace$(f, "\n", ";")
  rec = Split(ff, ";", "", TRUE)

sia con
Codice: [Seleziona]
  rec = Split(f, ";\n", "", TRUE)