Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-10-2006, 17:43   #1
c&c
Senior Member
 
L'Avatar di c&c
 
Iscritto dal: Apr 2005
Città: Brianza (MB)
Messaggi: 2958
[C] Richiesta programma - Gestione File

Ciao a tutti mi servirebbe un programmino in C che apre un file *.txt e quando trova il carattere "\n" lo sostituisce con "" (nulla), in modo che non ci siano gli a capo. piccolo accorgimento se "\n" è preceduto da "-" cancellerà anche "-", il risultato in un nuovo file *.txt.

Ex:
------------ prova.txt -------
Ciao come va? Spero
tutto bene. Ti va di uscire
con me in set-
timana a bere qualcosa
di fres-
co.

----------- ris.txt ---------
Ciao come va? Spero tutto bene. Ti va di uscire con me in settimana a bere qualcosa di fresco.
__________________
Trattative forum: +50 # Feedback E-Bay: 206 100% Positivi
iPhone 5S 16Gb # Macbook Pro late 2013, 2.3GHz i7, 16Gb DDR3, 500Gb, OSX 10.9.5
c&c è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 19:42   #2
TuLKaS85
Senior Member
 
L'Avatar di TuLKaS85
 
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
carica il file in un array di caratteri a , quindi

Codice:
i=0;
while (a[i]!='\n'&&a[i]!='-'&&a[i]!=EOF)
{
if(a[i]=='\n'||a[i]=='-')
    a[i]='';
i++;
}
__________________
Intel Pentium IV 3,0 GHz, Asus P5SD2-X , 1.0 Gb ddr2, Radeon X550 , Maxtor 160Gb sata, Hitachi 100 gb pata,Piooner Dvr-109 ,Microsoft Windows XP Professional Service Pack 2
TuLKaS85 è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 20:48   #3
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da c&c
----------- ris.txt ---------
Ciao come va? Spero tutto bene. Ti va di uscire con me in settimana a bere qualcosa di fresco.
veramente in questo esempio non hai rimosso i newlines, li hai sostituiti con uno spazio (tranne ovviamente dove c'era il "-"). ed inoltre dimentichi che solo su Linux i newlines sono semplici "\n": su Mac sono "\r", mentre su Windows sono coppie "\r\n".
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 20:52   #4
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da TuLKaS85
carica il file in un array di caratteri a , quindi

Codice:
i=0;
while (a[i]!='\n'&&a[i]!='-'&&a[i]!=EOF)
{
if(a[i]=='\n'||a[i]=='-')
    a[i]='';
i++;
}
non funziona correttamente: appena trova un newline o un trattino lo sostituisce (non si sa con cosa visto che '' non è un carattere valido) ed esce senza sostituire tutti i successivi. ed inoltre non è così che c&c intendeva gestire i trattini.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 21:07   #5
TuLKaS85
Senior Member
 
L'Avatar di TuLKaS85
 
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
giustamente
così xò dovrebbe andare
Codice:
i=0;
while (a[i]!=EOF)
{
if(a[i]=='\n')//mette spazio al posto d'invio probabile ke escono 2 spazi quando c'è l'invio
    a[i]=' ';
if(a[i]=='-')
{
// slitta l'array unendo le parole accapo
  j=i;
 while (a[i]!=EOF)
   {
       a[j]=a[j+1];
       j++;
   }
    
    
}
i++;
}
questo dovrebbe andare se invio viene memorizzato come \n
__________________
Intel Pentium IV 3,0 GHz, Asus P5SD2-X , 1.0 Gb ddr2, Radeon X550 , Maxtor 160Gb sata, Hitachi 100 gb pata,Piooner Dvr-109 ,Microsoft Windows XP Professional Service Pack 2
TuLKaS85 è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 23:15   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
no, non va neanche quello perché EOF non è un char, occupa 2 bytes; ed inoltre la fread non te lo mette nell'array, devi mettercelo manualmente.

EDIT: anche se EOF fosse un byte singolo non andrebbe lo stesso perché l'algoritmo per slittare l'array è bacato (off-by-one, non slitta l'EOF), ed inoltre non elimini il newline dopo il trattino.

Ultima modifica di 71104 : 25-10-2006 alle 23:18.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 09:08   #7
TuLKaS85
Senior Member
 
L'Avatar di TuLKaS85
 
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
Quote:
Originariamente inviato da 71104
no, non va neanche quello perché EOF non è un char, occupa 2 bytes; ed inoltre la fread non te lo mette nell'array, devi mettercelo manualmente.

EDIT: anche se EOF fosse un byte singolo non andrebbe lo stesso perché l'algoritmo per slittare l'array è bacato (off-by-one, non slitta l'EOF), ed inoltre non elimini il newline dopo il trattino.
beh il newline lo elimina mettendoci spazio al prossimo ciclo, quando fa il primo if, per quanto riguarda l'eof mi ricordo che lo usavo anche con le strighe poi non saperei.... cmq è facile modificare l'idea....
Codice:
i=0;
while (a[i]!=EOF)
{
if(a[i]=='\n')//mette spazio al posto d'invio probabile ke escono 2 spazi quando c'è l'invio
    a[i]=' ';
if(a[i]=='-')
{
// slitta l'array unendo le parole accapo
  j=i;
 while (a[j]!=EOF)
   {
       a[j]=a[j+1];
       j++;
   }
a[j-1]=a[j];  //copia l'eof
    
    
}
i++;
}
vediamo un pò
__________________
Intel Pentium IV 3,0 GHz, Asus P5SD2-X , 1.0 Gb ddr2, Radeon X550 , Maxtor 160Gb sata, Hitachi 100 gb pata,Piooner Dvr-109 ,Microsoft Windows XP Professional Service Pack 2
TuLKaS85 è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 09:15   #8
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
@c&c: certo che du' righe potevi almeno provare a tirarle giú

Codice:
#include <stdio.h>

int main(void)
{
   FILE *pIn  = fopen( "input.txt" , "r" ),
        *pOut = fopen( "output.txt", "w" );

   if (!pIn)
      puts("errore apertura file di input"), exit(1);

   if (!pOut)
      puts("errore apertura file di output"), exit(1);

   while (1) // SE FAI while(!feof(pIn)) DEVI RICONTROLLARE DOPO LA LETTURA
   {
      int c = fgetc(pIn); // LEGGO

      if ( feof(pIn) )
         break;

      if (c == '\n' || c == '\r' || c == '-' ) // SALTO IL CARATTERE
         continue;

      fputc( c, pOut ); // SCRIVO
   }
   fputc( '\n', pOut );
   
   fclose(pIn);
   fclose(pOut);
   
   return 0;
}
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 11:16   #9
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16211
Quote:
Originariamente inviato da c&c
Ciao a tutti mi servirebbe un programmino in C che apre un file *.txt e quando trova il carattere "\n" lo sostituisce con "" (nulla), in modo che non ci siano gli a capo. piccolo accorgimento se "\n" è preceduto da "-" cancellerà anche "-", il risultato in un nuovo file *.txt.
Fare tu i tuoi compiti proprio no, eh?
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 12:03   #10
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
Non mi sembra didattico postare subito il codice giusto, forse è meglio che lo fate prima ragionare (è evidentemente un esercizio di programmazione che deve fare come compito...)
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 15:30   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da TuLKaS85
beh il newline lo elimina mettendoci spazio al prossimo ciclo,
no: al prossimo ciclo lo sostituisci con uno spazio, mentre in quel caso lo devi proprio eliminare.

Quote:
per quanto riguarda l'eof mi ricordo che lo usavo anche con le strighe poi non saperei....
chiunque te lo può confermare

Quote:
cmq è facile modificare l'idea....
Codice:
[cut]
vediamo un pò
rimane il fatto che EOF occupa 2 bytes, non 1. ed inoltre non elimini il newline dopo il trattino.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 15:40   #12
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
@trallallero: il tuo codice ha un paio di problemi:
1) non scrive lo spazio se incontra un newline non preceduto dal trattino
2) mettere fgetc prima di feof secondo me è sbagliato perché se siamo in condizione di EOF fgetc stessa ritorna EOF; ovvero, se feof ti ritorna non-zero vuol dire che sicuramente fgetc ritornerà EOF (almeno così ho capito da www.linuxmanpages.com)

ed infine questa parte di codice:
Codice:
FILE *pIn  = fopen( "input.txt" , "r" ),
        *pOut = fopen( "output.txt", "w" );

   if (!pIn)
      puts("errore apertura file di input"), exit(1);

   if (!pOut)
      puts("errore apertura file di output"), exit(1);
nel caso specifico non da' problemi, ma in generale può causare leak. il discorso che in questo caso non badi ai leak perché tanto il programma termina subito non vale, perché in tal caso il codice manca di metodologia coerente (perché alla fine fai fclose...?)
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 16:05   #13
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da -fidel-
Non mi sembra didattico postare subito il codice giusto, forse è meglio che lo fate prima ragionare (è evidentemente un esercizio di programmazione che deve fare come compito...)
me culpa
che poi sono il primo a criticare chi chiede tutto e subito.
Ma stamattina non avevo 'na ceppa da fare e tra il parlar male di Prodi in politica e fare un mini C ho optato per la seconda
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 16:06   #14
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
Quote:
Originariamente inviato da 71104
nel caso specifico non da' problemi, ma in generale può causare leak. il discorso che in questo caso non badi ai leak perché tanto il programma termina subito non vale, perché in tal caso il codice manca di metodologia coerente (perché alla fine fai fclose...?)
Normalmente, se non per abitudine nello scrivere buon codice, è inutile chiudere i vari riferimenti, handle, file descriptors ecc. prima di terminare (anche se, effettivamente, nel codice che hai quitato lo si fa a metà: o tutto o niente, condivido ). Certo, è buona norma ricordarsene perché poi c'é il rischio di non chiuderli mai (anche quando il programma non deve terminare) andando incontro facilmente a memory leaks (e situazioni simili, come dangling pointers).
Sono in cerca di situazioni che causano memory leaks anche dopo la terminazione di un programma (insomma, funzioni che si riservano memoria nel loro spazio dei processi (ma non solo), e che non viene liberata (se non esplicitamente) anche dopo aver terminato.
Forse la shared memory?
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson

Ultima modifica di -fidel- : 26-10-2006 alle 16:12.
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 16:29   #15
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da 71104
@trallallero: il tuo codice ha un paio di problemi:
1) non scrive lo spazio se incontra un newline non preceduto dal trattino
vero. L'ho anche testato ma non mi sono accorto

Quote:
Originariamente inviato da 71104
2) mettere fgetc prima di feof secondo me è sbagliato perché se siamo in condizione di EOF fgetc stessa ritorna EOF; ovvero, se feof ti ritorna non-zero vuol dire che sicuramente fgetc ritornerà EOF (almeno così ho capito da www.linuxmanpages.com)
dici ? quindi forse é meglio:
Codice:
      int c = fgetc(pIn); 

      if ( c == EOF || feof(pIn) )
         break;
Quote:
Originariamente inviato da 71104
ed infine questa parte di codice:
Codice:
FILE *pIn  = fopen( "input.txt" , "r" ),
        *pOut = fopen( "output.txt", "w" );

   if (!pIn)
      puts("errore apertura file di input"), exit(1);

   if (!pOut)
      puts("errore apertura file di output"), exit(1);
nel caso specifico non da' problemi, ma in generale può causare leak. il discorso che in questo caso non badi ai leak perché tanto il programma termina subito non vale, perché in tal caso il codice manca di metodologia coerente
eh la madonna su un programma che aggiusta 3 righe di testo mi vieni a parlare di metodologia coerente ?
Cosa intendi per leak ? il fatto che non chiudo il primo file se fallisce il secondo ? si é una svista


Quote:
Originariamente inviato da 71104
(perché alla fine fai fclose...?)
sono abituato a chiudere la porta quando esco
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 16:41   #16
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da trallallero
dici ? quindi forse é meglio:
Codice:
      int c = fgetc(pIn); 

      if ( c == EOF || feof(pIn) )
         break;
no, io dicevo proprio di mettere feof come condizione nel while...

perché non ce l'hai messa? che male ti faceva?

Quote:
[...] si é una svista


Quote:
sono abituato a chiudere la porta quando esco
e se hai due porte ne chiudi solo una?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 17:09   #17
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da 71104
no, io dicevo proprio di mettere feof come condizione nel while...
perché non ce l'hai messa? che male ti faceva?
perché se lo metti nella condizione poi lo devi ricontrollare quando leggi.
L'ho messo nel commento

Quote:
Originariamente inviato da 71104
e se hai due porte ne chiudi solo una?
guarda oggi sto vicino ad una crisi di nervi ( voglio il divorzio )
giá tanto che sia riuscito ad aprire e leggere un file
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 19:01   #18
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da -fidel-
Sono in cerca di situazioni che causano memory leaks anche dopo la terminazione di un programma (insomma, funzioni che si riservano memoria nel loro spazio dei processi (ma non solo), e che non viene liberata (se non esplicitamente) anche dopo aver terminato.
Forse la shared memory?
hmm, no... secondo me in Win32 di simile trovi sostanzialmente solo gli handle User e GDI (finestre e oggetti grafici).
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 19:05   #19
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da trallallero
perché se lo metti nella condizione poi lo devi ricontrollare quando leggi.
L'ho messo nel commento
ma perché...? scusa eh...
- se non siamo a EOF, prima feof restituisce 0 e poi fgetc resituisce un carattere
- se siamo a EOF, feof restituisce non-zero facendoti uscire dal ciclo perché se entrassi fgetc restituirebbe EOF

perché mai devi ricontrollare dopo la fgetc...?

Quote:
guarda oggi sto vicino ad una crisi di nervi ( voglio il divorzio )
ok, allora consiglio da amico: sbattitene ampiamente del C (che non può che peggiorare la tua situazione nervosa) e rappacificati con la muliere

dai su, che quando avete fatto pace vi amate ancora più di prima ("l'amore non è bello se non è litigarello", ti giuro che è vero )
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 20:42   #20
Qu@ker
Member
 
Iscritto dal: Apr 2004
Messaggi: 130
<e a questo punto il Docente, bonariamente, giocherella con il libretto e chiede>
Quando è, secondo Lei, che viene settato l'indicatore di eof, in C (e non, poniamo, in Pascal)?
Qu@ker è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
'Robot abbastanza forti da fratturare un...
Anche DAZN ha il suo Black Friday: 40 eu...
Carmageddon: Rogue Shift, il prossimo ca...
Redal Alert 2: Command & Conquer si ...
Kingston Technology: memorie e storage c...
Narwal Freo Z10 Ultra: il robot con moci...
In 3 minuti le vedete tutte: sono le mig...
Black Friday da record per Tineco: le sc...
La nuova PS5 con Fortnite manda in tilt ...
Amazon, i tagli hanno colpito soprattutt...
Pazzesco: Panasonic Lumix DC-GH5M2E a 79...
Ecco tutte le offerte Black Friday pi&ug...
DJI Neo a 169€, Flip Combo a 309€ e molt...
Quattro persone arrestate negli USA per ...
Kindle Paperwhite Signature Edition, Col...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:43.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v