[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