[Excel, C++] CONTARE il CONTENUTO delle CELLE
Come si fa a contare quante volte il contenuto di una cella si ripete ?
Non devo per forza usare Excel, se si può fare creando un programmino con C++ o simili va bene lo stesso.
Qui è possibile fare qualcosa di simile: http://office.microsoft.com/it-it/excel ... 70480.aspx
La differenza è che io non conosco quanti e quali sono i contenuti.
Mi spiego meglio: sto facendo una ricerca bibliografica e devo contare QUANTE volte una keywords contenuta negli abstract degli articoli di una rivista dal 1999 al 2012 si ripete.
Con un po di fatica alla fine sono riuscito a scremare il file csv esportato dal database SCOPUS ottentendo un file excel in cui in ogni cella è presente una keyword (non necessariamente un'unica parola) : https://www.dropbox.com/s/r92u7phv9y090m2/keywords.xlsx
credo che siamo almeno sulle 10'000 stringhe di caratteri.
Devo contare quante volte ogni keyword è ripetuta. E' possibile?
Non devo per forza usare Excel, se si può fare creando un programmino con C++ o simili va bene lo stesso.
Qui è possibile fare qualcosa di simile: http://office.microsoft.com/it-it/excel ... 70480.aspx
La differenza è che io non conosco quanti e quali sono i contenuti.
Mi spiego meglio: sto facendo una ricerca bibliografica e devo contare QUANTE volte una keywords contenuta negli abstract degli articoli di una rivista dal 1999 al 2012 si ripete.
Con un po di fatica alla fine sono riuscito a scremare il file csv esportato dal database SCOPUS ottentendo un file excel in cui in ogni cella è presente una keyword (non necessariamente un'unica parola) : https://www.dropbox.com/s/r92u7phv9y090m2/keywords.xlsx
credo che siamo almeno sulle 10'000 stringhe di caratteri.
Devo contare quante volte ogni keyword è ripetuta. E' possibile?
Risposte
Certamente è possibile
è un po' laborioso ma si può fare.
Come vuoi che ti venga restituito il risultato? Andrebbe bene un file di testo dove in ogni riga hai una keyword e il rispettivo numero di ripetizioni?
è un po' laborioso ma si può fare.
Come vuoi che ti venga restituito il risultato? Andrebbe bene un file di testo dove in ogni riga hai una keyword e il rispettivo numero di ripetizioni?
avrei bisogno di fare un grafico quindi mi servirebbe una tabella in excel.
Ma un file di testo va benissimo, dato che è possibile importarne i dati in excel, a patto che i separatori siano simboli diversi dalla virgola, dato che alcune keyword contengono anche la virgola. Punto e virgola sarebbe perfetto.
Edit: questo è il csv da cui sono partito, magari ti è utile https://www.dropbox.com/s/y46jqe7h7jxpgfk/scopus_6.csv
Ma un file di testo va benissimo, dato che è possibile importarne i dati in excel, a patto che i separatori siano simboli diversi dalla virgola, dato che alcune keyword contengono anche la virgola. Punto e virgola sarebbe perfetto.

Edit: questo è il csv da cui sono partito, magari ti è utile https://www.dropbox.com/s/y46jqe7h7jxpgfk/scopus_6.csv
Mi ci metto più che volentieri....
ho bisogno di un po' di tempo perchè il tempo libero è veramente scarso
cerco di fare il più un fretta possibile
ho bisogno di un po' di tempo perchè il tempo libero è veramente scarso

cerco di fare il più un fretta possibile
Perchè il codice che segue funzioni il file excel deve essere nella stessa cartella del file eseguibile
using System; using System.Collections.Generic; using System.Text; using Excel = Microsoft.Office.Interop.Excel; namespace ParoleExcel { class Program { static void Main(string[] args) { Dictionary<string, int> dicElementi = new Dictionary<string, int>(); string exePath = AppDomain.CurrentDomain.BaseDirectory; Excel.Application oExcel = new Excel.Application(); Excel.Workbook oBook = oExcel.Workbooks.Open(exePath + "\\keywords.xlsx"); Excel.Worksheet oSheet = (Excel.Worksheet)oBook.Worksheets.get_Item(1); Excel.Range range ; range = oSheet.UsedRange; string sContenutoCella; int ContatoreRighe = 1; int ContatoreColonne = 1; Boolean bEsci = false; Console.Write("Inizio analisi del file...\n"); Console.Write("Riga.... 1"); while (!bEsci) { sContenutoCella = (string)(oSheet.Cells[ContatoreRighe, ContatoreColonne] as Excel.Range).Value; if (ContatoreColonne == 1 && sContenutoCella == null) bEsci = true; else { if (sContenutoCella == null) { ContatoreRighe++; ContatoreColonne = 1; Console.Write("Riga.... " + ContatoreRighe.ToString() + "\n"); } else { if (dicElementi.ContainsKey(sContenutoCella)) { dicElementi[sContenutoCella] += 1; } else { dicElementi.Add(sContenutoCella, 1); } ContatoreColonne++; } } } Console.Write("Analisi Completata!"); oBook.Close(true, null, null); oExcel.Quit(); releaseObject(oSheet); releaseObject(oBook); releaseObject(oExcel); System.Text.StringBuilder mySB = new StringBuilder(); foreach( KeyValuePair<string, int> kvp in dicElementi ) { mySB.Append(kvp.Key); mySB.Append(";"); mySB.AppendLine(kvp.Value.ToString()); } System.IO.File.WriteAllText("risultato.txt",mySB.ToString()); } public static void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; Console.Write("Unable to release the Object " + ex.ToString()); } finally { GC.Collect(); } } } }
grazie milleeeeeeeee
