Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
OPPO Reno14 F 5G si propone come smartphone di fascia media con caratteristiche equilibrate. Il device monta processore Qualcomm Snapdragon 6 Gen 1, display AMOLED da 6,57 pollici a 120Hz, tripla fotocamera posteriore con sensore principale da 50MP e generosa batteria da 6000mAh con ricarica rapida a 45W. Si posiziona come alternativa accessibile nella gamma Reno14, proponendo un design curato e tutto quello che serve per un uso senza troppe preoccupazioni.
Destiny Rising: quando un gioco mobile supera il gioco originale
Destiny Rising: quando un gioco mobile supera il gioco originale
Tra il declino di Destiny 2 e la crisi di Bungie, il nuovo titolo mobile sviluppato da NetEase sorprende per profondità e varietà. Rising offre ciò che il live service di Bungie non riesce più a garantire, riportando i giocatori in un universo coerente. Un confronto che mette in luce i limiti tecnici e strategici dello studio di Bellevue
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro è un registratore digitale elegante e tascabile con app integrata che semplifica trascrizioni e riepiloghi, offre funzioni avanzate come template e note intelligenti, ma resta vincolato a un piano a pagamento per chi ne fa un uso intensivo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-10-2006, 16: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, 18: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, 19: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, 19: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, 20: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, 22: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 22:18.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 08: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, 08: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, 10: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, 11: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, 14: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, 14: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, 15: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, 15: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 15:12.
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 15: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, 15: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, 16: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, 18: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, 18: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, 19: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


Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza Sottile, leggero e dall'autonomia WOW: OPPO Reno...
Destiny Rising: quando un gioco mobile supera il gioco originale Destiny Rising: quando un gioco mobile supera il...
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Formula 1 2026, nuove gare Sprint in cal...
MacBook Pro con display OLED e supporto ...
Poste Italiane: dati di milioni di utent...
Microsoft blocca RaccoonO365, rubate olt...
15 anni dopo Skate 3, il gioco torna sot...
Molte novità per MongoDB: version...
Cina, stop alle GPU NVIDIA: Pechino inti...
Google Pixel 10 con sconti super: ecco q...
Apple Mac mini con chip M4 a soli 598€ s...
DJI firma la rivoluzione: ecco il Mini 5...
Si spara in Friuli Venezia Giulia, ma so...
Trasformare una sigaretta elettronica us...
Addio ai clic inutili: arriva l'app Goog...
L'autobus elettrico interurbano di Merce...
Il PPE contro il Green Deal: 'Salviamo l...
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:44.


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