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 17-07-2006, 01:41   #1
Biscazziere
Junior Member
 
Iscritto dal: Sep 2005
Messaggi: 27
[c] Sapere numero di righe di un file di testo

Ciao, leggo le parole che compongono un file di testo con la funzione fscanf, che salta i caratteri tipo a capo e spazio. Come posso fare per sapere a che riga del file mi trovo mentre sto leggendo una parola con fscanf?

Grazie.
Biscazziere è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 08:52   #2
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 979
Prova a leggerlo con la funzione fgets. Quando il carattere è uguale a '\n' allora incrementi un contatore di 1. Non è difficile
__________________
Workstation: CPU AMD Ryzen 5900X @ 4900 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU AMD Radeon RX 9070 XT | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz FreeSync
Starise è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 11:41   #3
Biscazziere
Junior Member
 
Iscritto dal: Sep 2005
Messaggi: 27
il problema è che sono vincolato ad usare fscanf... ho letto che ad esempio scrivendo fscanf(fp, "%[^\n]s", parola) posso evitare/includere dei caratteri tipo lo \n. Non c'è modo di fare leggere a fscanf anche gli a capo invece di saltarli? Oppure di usare una compinazione di fscanf e quanlche altra funzione

Ultima modifica di Biscazziere : 17-07-2006 alle 11:53.
Biscazziere è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 14:43   #4
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Biscazziere
il problema è che sono vincolato ad usare fscanf... ho letto che ad esempio scrivendo fscanf(fp, "%[^\n]s", parola) posso evitare/includere dei caratteri tipo lo \n. Non c'è modo di fare leggere a fscanf anche gli a capo invece di saltarli? Oppure di usare una compinazione di fscanf e quanlche altra funzione
la fscanf ?
non l'hanno ancora eliminata ?
Ti posso solo consigliare di contare i \n ad ogni fscaneffata ...
__________________
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 17-07-2006, 15:07   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Biscazziere
il problema è che sono vincolato ad usare fscanf...
allora l'esercizio non si può fare perché non sai quanto spazio allocare per il buffer

Quote:
Non c'è modo di fare leggere a fscanf anche gli a capo invece di saltarli? Oppure di usare una compinazione di fscanf e quanlche altra funzione
fai una fscanf a vuoto e usa fread
leggi con fread a blocchi di 4 kb e analizza i blocchi byte per byte; ad ogni \n che trovi incrementi il contatore.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 15:09   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da 71104
allora l'esercizio non si può fare perché non sai quanto spazio allocare per il buffer
mi correggo: puoi allocare uno spazio equivalente alla dimensione del file
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 15:10   #7
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da 71104
mi correggo: puoi allocare uno spazio equivalente alla dimensione del file
mi correggo nuovamente: non puoi perché dopo che hai allocato il buffer un altro processo potrebbe ingrandire il file scrivendoci un'unica linea lunga il doppio delle dimensioni precedenti

LOL, ma questo Linux fa acqua da tutte le parti
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 15:13   #8
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da 71104
LOL, ma questo Linux fa acqua da tutte le parti
ma neanche Linux, diciamo proprio Unix

ma vabbè, porello... è vecchio di decenni ormai...
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 15:18   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
bah, io mi sto ancora sinceramente chiedendo chi ha scritto i prototipi delle funzioni Unix come c***o pensava che avrebbero dovuto fare i programmatori a sapere le dimensioni dei buffer
mi piacerebbe tanto conoscere la risposta... praticamente quelle funzioni sono inutilizzabili
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 15:48   #10
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da 71104
ma neanche Linux, diciamo proprio Unix

ma vabbè, porello... è vecchio di decenni ormai...
Che centrano unix e linux? Con C avresti gli stessi problemi su qualsiasi sistema operativo.

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 16:02   #11
Biscazziere
Junior Member
 
Iscritto dal: Sep 2005
Messaggi: 27
Dunque, io leggo le varie parole del file di testo così:

fscanf(fp, "%s", parola);

per quanto ne so la fscanf elimina automaticamente gli spazi e gli a capo, quindi non vengono letti gli spazi e gli a capo e non ho modo di verificare quando è stato letto un a capo. Non c'è modo con la fscanf di far leggere gli a capo e di metterli al fondo della stringa "parola", in modo poi da poter verificare?

Cosa significa "fare una fscanf a vuoto e poi usare fread?"
Biscazziere è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 16:16   #12
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Biscazziere
per quanto ne so la fscanf elimina automaticamente gli spazi e gli a capo, quindi non vengono letti gli spazi e gli a capo e non ho modo di verificare quando è stato letto un a capo.
'azz é vero! il mio suggerimento va a farsi fottere

Quote:
Originariamente inviato da Biscazziere
Non c'è modo con la fscanf di far leggere gli a capo e di metterli al fondo della stringa "parola", in modo poi da poter verificare?
che io sappia no ...

Quote:
Originariamente inviato da Biscazziere
Cosa significa "fare una fscanf a vuoto e poi usare fread?"
suppongo fare un fscanf per rispettare le regole dell'esercizio e poi fai come pare a te
__________________
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 17-07-2006, 16:24   #13
Biscazziere
Junior Member
 
Iscritto dal: Sep 2005
Messaggi: 27
su un sito ho trovato una sintassi del genere, c'è scritto che serve per modificare quello che viene letto dalla fscanf:

fscanf(fp, "%[^\n]s", parola);

Non ho trovato molte spiegazioni, qualcuno ne sa qualcosa?

Posso usare insieme alla fscanf qualche altra funzione tipo fgetc? Avevo provato solo che usando anche fgetc mi si sballava il punto a cui era arrivato il file pointer per la fscanf
Biscazziere è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 16:39   #14
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Biscazziere
su un sito ho trovato una sintassi del genere, c'è scritto che serve per modificare quello che viene letto dalla fscanf:

fscanf(fp, "%[^\n]s", parola);

Non ho trovato molte spiegazioni, qualcuno ne sa qualcosa?

Posso usare insieme alla fscanf qualche altra funzione tipo fgetc? Avevo provato solo che usando anche fgetc mi si sballava il punto a cui era arrivato il file pointer per la fscanf
dal man di fscan
Quote:
... reading input until no more valid input can
be read, or up to the first byte which is not a white-space
character which remains unread.
Secondo me non c'é soluzione con la fscanf.
__________________
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 17-07-2006, 16:43   #15
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
infatti, rassegnati e goditi la possibilità di dire al tuo prof che è niubbo...

Quote:
Originariamente inviato da trallallero
suppongo fare un fscanf per rispettare le regole dell'esercizio e poi fai come pare a te
esatto
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 16:58   #16
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da 71104
infatti, rassegnati e goditi la possibilità di dire al tuo prof che è niubbo...
beato lui, che goduria
__________________
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 17-07-2006, 17:03   #17
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
ASPETTA!
prima di niubbare il tuo prof!

si puó fare:
Codice:
   fscanf(pf, "%c", s );
dove s é comunque una stringa (s[2])
Devi poi analizzare s[0]
Ora vo via spero tu abbia capito

EDIT: ieri con la fretta non ci ho pensato ...
Codice:
   char c;
 ...
   fscanf(pf, "%c", &c );
non serve s[] come stringa ma basta un char singolo e passi alla fscanf l'indirizzo
__________________
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

Ultima modifica di trallallero : 18-07-2006 alle 07:55.
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 17:06   #18
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Biscazziere
su un sito ho trovato una sintassi del genere, c'è scritto che serve per modificare quello che viene letto dalla fscanf:

fscanf(fp, "%[^\n]s", parola);

Non ho trovato molte spiegazioni, qualcuno ne sa qualcosa?
Ciao,
la fscanf() in oggetto e' stata scritta pensando che accetti in ingresso delle espressioni regolari. Non mi risulta che sia possibile, magari si trattava di una libreria non standard, oppure e' una delle tante cose che non conosco.

Certo che avendo a disposizione le espressioni regolari, il tuo programma si ridurrebbe ad una sola linea.

High Flying
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 18:30   #19
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da sottovento
Ciao,
la fscanf() in oggetto e' stata scritta pensando che accetti in ingresso delle espressioni regolari. Non mi risulta che sia possibile, magari si trattava di una libreria non standard, oppure e' una delle tante cose che non conosco.
si che è possibile...

perché come si fa in una sola linea con le espressioni regolari...?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 19:33   #20
Qu@ker
Member
 
Iscritto dal: Apr 2004
Messaggi: 130
Potresti provare con qualcosa di questo tipo:
Codice:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	char c;
	int riga = 0;
	FILE *in;

	
	if (argc != 2)
		return 0;
	in = fopen(argv[1], "r");
	if (in == NULL) {
		perror("fopen()");
		exit(EXIT_FAILURE);
	}
	for (;;) {
		char buffer[256] = {0};
		int result = fscanf(in, "%255[^ \f\n\r\t\v]%c", buffer, &c);

		if (result == EOF)
			break;
		if (result == 2) {
			printf("riga: %d parola: %s\n", riga+1, buffer);
			if (c == '\n')
				++riga;
		} else if (result == 0) {
			if (fscanf(in, "%c", &c) == 1 && c == '\n') {
				printf("riga %d vuota\n", riga+1);
				++riga;
			}
		} else {
			puts("Percepisco una turbolenza nella forza...");
			break;
		}
			
	}
	fclose(in);

	return 0;
}
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...
Il nuovo Qualcomm Snapdragon 8 Gen 5 stu...
Sky e Amazon trasmetteranno la Champions...
'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...
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: 22:03.


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