Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Grep in C.

1 view
Skip to first unread message

Tantumergo

unread,
Dec 18, 2009, 10:41:18 AM12/18/09
to
Ho da aggiornare una specie di statistica giornaliera aggiungendo ogni
giorno in coda a un file una nuova riga, una sola volta al giorno(!).
Adesso ci pensa la shell di Bash con grep a bloccare ogni
duplicazione di righe, ma, essendo la fonte degli aggiornamenti
un programma in C, vorrei affidare ad esso anche questa
funzione. How to?
Anticipatamente ringrazio con auguri di buone feste.


--
Qui si usa Linux
http://www.puppylinux.org

michelangelo giacomelli

unread,
Dec 18, 2009, 10:50:41 AM12/18/09
to
Il 18/12/2009 16:41, Tantumergo ha scritto:
> Ho da aggiornare una specie di statistica giornaliera aggiungendo ogni
> giorno in coda a un file una nuova riga, una sola volta al giorno(!).
> Adesso ci pensa la shell di Bash con grep a bloccare ogni
> duplicazione di righe, ma, essendo la fonte degli aggiornamenti
> un programma in C, vorrei affidare ad esso anche questa
> funzione. How to?
> Anticipatamente ringrazio con auguri di buone feste.
>
>
o non ti sei spiegato molto bene o io non ho capito...
tieni la string in cache in buffer e quando arriva la nuova se � uguale
alla vecchia non scrivi sul file, se � diversa scrivi e inserisci la
nuova nel buffer.
Perch� devi scrivere duplicati e poi eliminarli dopo?

Tantumergo

unread,
Dec 18, 2009, 2:36:42 PM12/18/09
to michelangelo giacomelli
In data 18 dicembre 2009 alle ore 16:50:41, michelangelo giacomelli
<michel...@blu.it> ha scritto:
..omissis...

Antefatto:
Al primo avvio del mio pc parte un programma (principale) che calcola le
effemeridi solari e
segna su un file di testo il minuto esatto dei vari eventi previsti per
quel giorno.

Il crontab è regolato per scattare ogni minuto e, quando arriva uno dei
minuti
previsti su quel file (alba, tramonto, culminazione ecc. ma anche
qualsiasi altra cosa)
fa partire una serie di effetti corrispondenti: cambio dello sfondo e
delle icone, suoni, avvisi ecc.

Inoltre al primo avvio i dati con il minuto del verificarsi di ciascun
evento
solare vengono aggiunti a un altro file di testo che serve a costruire
giorno
dopo giorno delle statistiche annuali.

Esso va aggiornato una sola volta per giorno, non ogni volta che si
riaccende il computer.

Finora ho ottenuto questo con un paio di righe della shell,usando grep,
ma adesso vorrei affidare anche questo compito al programma principale.

Quesito: col C, come controllare in un file l'esistenza di una riga già
contenente
la data corrente per decidere se aggiornare o meno?

Saluti.

--
Creato con il rivoluzionario client e-mail di Opera:
http://www.opera.com/mail/

neonano

unread,
Dec 18, 2009, 3:25:42 PM12/18/09
to
Addì venerdì 18 dicembre 2009 16:41 Tantumergo scrisse:

> Ho da aggiornare una specie di statistica giornaliera aggiungendo ogni
> giorno in coda a un file una nuova riga, una sola volta al giorno(!).

> ...

man anacron


Addì venerdì 18 dicembre 2009 16:41 Tantumergo scrisse:
> ...


> Adesso ci pensa la shell di Bash con grep a bloccare ogni
> duplicazione di righe, ma, essendo la fonte degli aggiornamenti
> un programma in C, vorrei affidare ad esso anche questa
> funzione. How to?

Semplicemente prima di aggiornare il log esegui un controllo per
evitare la duplicazione. Puoi implementare da solo una funzione
per ricercare una stringa od usare le librerie C per le espressioni
regolari.


neonano

unread,
Dec 18, 2009, 3:44:48 PM12/18/09
to
Addì venerdì 18 dicembre 2009 20:36 Tantumergo scrisse:

> Il crontab è regolato per scattare ogni minuto e, quando arriva uno dei
> minuti
> previsti su quel file (alba, tramonto, culminazione ecc. ma anche
> qualsiasi altra cosa)
> fa partire una serie di effetti corrispondenti: cambio dello sfondo e
> delle icone, suoni, avvisi ecc.

Cioè il tuo programma imita crontab oppure crontab avvia il tuo programma
che avvia altri programmi?
Perché non usi direttamente fcron?


Addì venerdì 18 dicembre 2009 20:36 Tantumergo scrisse:
> ...

> Inoltre al primo avvio i dati con il minuto del verificarsi di ciascun
> evento
> solare vengono aggiunti a un altro file di testo che serve a costruire
> giorno
> dopo giorno delle statistiche annuali.

> ...

Questo può ottenersi molto facilmente facendo avviare il tuo programma
mediante anacron (o fcron) magari con una opzione che gli fa solo
aggiornare le statistiche.


Addì venerdì 18 dicembre 2009 20:36 Tantumergo scrisse:
> ...


> Quesito: col C, come controllare in un file l'esistenza di una riga già
> contenente
> la data corrente per decidere se aggiornare o meno?

Gli algoritmi per la ricerca di stringhe sono tra gli algoritmi fondamentali
ed il C ha delle funzioni standard per le espressioni regolari.


Tantumergo

unread,
Dec 19, 2009, 4:27:42 AM12/19/09
to neonano
Il giorno Fri, 18 Dec 2009 21:44:48 +0100
neonano <neo...@mi5.uk> ha scritto:

> Addì venerdì 18 dicembre 2009 20:36 Tantumergo scrisse:
>
>
>

> Cioè il tuo programma imita crontab oppure crontab avvia il tuo
> programma che avvia altri programmi?
> Perché non usi direttamente fcron?
>

Ho un unico file crontab che scatta ogni minuto:
* * * * * /dir/SCRIPT
SCRIPT (di shell) richiama il programma principale in C
ogni minuto. Quest' ultimo esegue tutto ciò che in esso
è previsto per quel minuto della giornata
Per minuto intendo=ora*60+min.
Il mezzogiorno civile, non quello solare locale,
avviene ad esempio al minuto 720.
Lo script:
a=`principale`
gmessage $a
Il crontab non costituisce problema.


>
> Questo può ottenersi molto facilmente facendo avviare il tuo
> programma mediante anacron (o fcron) magari con una opzione che gli
> fa solo aggiornare le statistiche.

Vedrò le opzioni dei due suddetti.

Qui si tratta di un file che deve avere una e una sola riga di
aggiornamento al giorno. Con uno script di shell e grep
attualmente così è, ma io vorrei far svolgere il compito
direttamente al programma principale in C.

Due righe d'esempio: la riga relativa ad oggi deve poter essere
aggiunta solo se non già presente, come in questo caso.

---
2009/12/16 - Prime luci 6:19 Alba 7:26 Culminazione 11:59
Tramonto 16:31 Notte 17:38 Durata giorno 9:05

2009/12/17 - Prime luci 6:20 Alba 7:27 Culminazione 11:59 Tramonto
16:32 Notte 17:39 Durata giorno 9:05

2009/12/18 - Prime luci 6:20 Alba 7:27 Culminazione 11:59
Tramonto 16:32 Notte 17:39 Durata giorno 9:05
---
Gli orari sono riferiti escusivamente a latitudine e longitudine locali.


>
>
> Gli algoritmi per la ricerca di stringhe sono tra gli algoritmi
> fondamentali ed il C ha delle funzioni standard per le espressioni
> regolari.
>

Andrò a cercarle.

Saluti e auguri di buone feste.


--

Jack

unread,
Dec 21, 2009, 7:32:38 AM12/21/09
to
On 18 Dic, 20:36, Tantumergo <spaccafumo...@katamail.com> wrote:
> In data 18 dicembre 2009 alle ore 16:50:41, michelangelo giacomelli  
> <michelange...@blu.it> ha scritto:

> ..omissis...
>
> Antefatto:
> Al primo avvio del mio pc parte un programma (principale) che calcola le  
> effemeridi solari e
> segna su un file di testo il minuto esatto dei vari eventi previsti per  
> quel giorno.
>
> Il crontab è regolato per scattare ogni minuto e, quando arriva uno dei  
> minuti
> previsti su quel file (alba, tramonto, culminazione ecc. ma anche  
> qualsiasi altra cosa)
> fa partire una serie di effetti corrispondenti: cambio dello sfondo e  
> delle icone, suoni, avvisi ecc.
>
> Inoltre al primo avvio i dati con il minuto del verificarsi di ciascun  
> evento
> solare vengono aggiunti a un altro file di testo che serve a costruire  
> giorno
> dopo giorno delle statistiche annuali.
>
> Esso va aggiornato una sola volta per giorno, non ogni volta che si  
> riaccende il computer.
>
> Finora ho ottenuto questo con un paio di righe della shell,usando grep,
> ma adesso vorrei affidare anche questo compito al programma principale.

che roba complicata.
Conviene far andare il programma principale una volta all'anno e
fargli calcolare le effemeridi per tutto l'anno, e poi cron fa quello
che deve.
Oppure fai fare direttamente al programma C le cose che adesso fai
fare a cron (hint: sleep()).

Ciao Jack

Tantumergo

unread,
Dec 21, 2009, 9:46:23 AM12/21/09
to Jack
In data 21 dicembre 2009 alle ore 13:32:38, Jack <jack...@gmail.com> ha
scritto:

<..omissis..>


> Oppure fai fare direttamente al programma C le cose che adesso fai
> fare a cron (hint: sleep()).

E' a questo che voglio arrivare. Un unico programma eseguibile che faccia
tutto da solo e che funzioni sul maggior numero possibile di pc.
Certo, con 1440 x 365 = 525600 minuti in un anno, hai voglia a programmarti
ogni momento della vita.
Sul "principale" reso annuale e non più giornaliero scriverei:
if (minuto == 452600) printf("Hai vinto alla lotteria\n");
E resterei in attesa, per vedere se i soldi arrivano veramente... :-)

Saluti e buone feste.

Jack

unread,
Dec 21, 2009, 9:56:09 AM12/21/09
to
On 21 Dic, 15:46, Tantumergo <spaccafumo...@katamail.com> wrote:
> In data 21 dicembre 2009 alle ore 13:32:38, Jack <jack4...@gmail.com> ha  

> scritto:
>
> <..omissis..>> Oppure fai fare direttamente al programma C le cose che adesso fai
> > fare a cron (hint: sleep()).
>
> E' a questo che voglio arrivare. Un unico programma eseguibile che faccia
> tutto da solo e che funzioni sul maggior numero possibile di pc.

eh, allora lascia perdere il C e usa un linguaggio multipiattaforma
(java, python,...).

Ciao Jack

0 new messages