[C] Split_number_list


Progetto: Split_number_list
Linguaggio di programmazione: C
Inizio dello sviluppo: Settembre 2008
Stato: Non attivo
Versione: 0.01
Autore: ercoppa
Obiettivo: Creare un programma che leggesse da un file di testo una serie di numeri (uno per riga) e li suddividesse in tanti file di testo in base ad un intervallo impostato (esempio a step di 5 milioni). E' pensato per gestire interi molto grandi. Le costanti STEP e STOP regolano l'intervallo da usare e il valore del numero massimo da gestire.
Licenza: GPL-2 o successive
Note: Il codice è stato scritto per un amico e pertanto non ha grandi ambizioni se non fare quello per cui è stato richiesto.
Download:
• codice sorgente
• binario con STEP=5000 e STOP=10000000 (i686 GNU/Linux)
• 3 commenti • Inserisci un commento • Pubblicato il 3 settembre 2008 •
2.
Antonio Barba
- 11 gennaio 2009 @ 2:12
Ciao, ho dato un'occhiata al codice per curiosità. Puoi velocizzare di molto il tuo programmino con un semplice trucco: invece di leggere un numero alla volta dal file, prova ad allocare un buffer (un semplice array andrebbe benissimo) molto grande (almeno un migliaio di elementi), da riempire con una singola chiamata di lettura da file (magari tramite fread). Dopo conta gli elementi in questo buffer e scrivili in una chiamata unica sul file di destinazione. In questo modo minimizzi gli accessi al filesystem, favorendo i trasferimenti di grossi batch sequenziali (molto più veloci delle singole letture da pochi byte alla volta).
3.
ercoppa
- 11 gennaio 2009 @ 2:28
Ciao Antonio, prima di tutto grazie per essere passato :-)Riguardo al tuo consiglio, devo dire che sicuramente è una soluzione molto più efficiente, grazie del suggerimento. Non è prevista una seconda versione di questo "programma" (più uno sputo di codice che altro... ), però una situazione del genere mi può capitare in molte altre applicazioni e pertanto farò tesoro della tua dritta.
Saluti.

Il programma gira benissimo ... magari un po' lento (ci ha messo 15 minuti a splittare un file da 2GB in 800 files da ~3MB l'uno) ma cmq molto potente ed efficace.
Ringrazio ancora per il tuo lavoro a prepararlo cosicchè potessi finire (o meglio, iniziare :D) la mia ricerca scolastica ;)
Grazie !
Ciao. Lucky Linux.