Torna indietro   Hardware Upgrade Forum > Software > Programmazione

MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-01-2011, 00:35   #1
Metal Gabber
Junior Member
 
Iscritto dal: Jul 2009
Messaggi: 13
[C] I/O su file

Sì, lo so che internet è pieno di guide e topic che riguardano l'argomento, ma nessuno dei molti che ho guardato mi andava bene.

1) C'è un qualche modo per poter scrivere su un file ad una riga precisa? Sto finendo un progetto per l'università, e volevo aggiungere al mio programma un file txt per memorizzare le impostazioni del programma.
Per ora pensavo a qualcosa di semplice, tipo un numero per ogni impostazione, tutti separati da un 'a capo'.
Il problema a questo punto è che se mentre eseguo il programma vado a cambiare l'impostazione che viene memorizzata nella seconda riga del file settings.txt, non so come fare per modificare solo quella.

2) C'è un modo per leggere da un file una riga precisa? Attualmente, nel mio progetto, ho adottato questa soluzione:

Codice:
//il numero della riga del file che devo leggere è memorizzata in 'sel'
int i = 0;
while(i <= sel) //finché i è <= della riga che ho scelto...
{
	fscanf(file, "%s", s);//...salva in s la parola della riga corrente
	i++;
}
non c'è una soluzione più elegante?
Metal Gabber è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2011, 12:18   #2
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13065
Secondo me ti conviene fare in modo di usare impostazioni del tipo

CHIAVE = VALORE

Magari ognuna su una linea per facilitare la lettura.

Poi le coppie (chiave, valore) puoi metterle all'interno di una mappa.

In questo modo per altro non vincoli l'utente a mettere le impostazioni in un ordine particolare.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2011, 07:15   #3
Metal Gabber
Junior Member
 
Iscritto dal: Jul 2009
Messaggi: 13
Preferivo non usare, per ora, il metodo "chiave=valore" per evitare di dover estrarre ogni volta il valore: se tengo solo un numero l'accesso è più immediato, infatti io so già che il numero della prima riga si riferisce a una cosa, quello della seconda ad un'altra e così via.

edit: non ho capito se la tua risposta si riferiva anche alla mia seconda domanda
Metal Gabber è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2011, 16:00   #4
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13065
Quote:
Originariamente inviato da Metal Gabber Guarda i messaggi
Preferivo non usare, per ora, il metodo "chiave=valore" per evitare di dover estrarre ogni volta il valore: se tengo solo un numero l'accesso è più immediato, infatti io so già che il numero della prima riga si riferisce a una cosa, quello della seconda ad un'altra e così via.

edit: non ho capito se la tua risposta si riferiva anche alla mia seconda domanda
Se usi la coppia CHIAVE=VALORE il caricamente lo fai una volta sola, all'inizio del programma senza aver bisogno di leggere ogni volta da file (se ho capito cosa volevi fare te).

Chiaramente facendo così non ti serve andare a pescare una riga in particolare.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2011, 20:21   #5
Metal Gabber
Junior Member
 
Iscritto dal: Jul 2009
Messaggi: 13
Ma il punto non è quello, anche perché il caricamento posso farlo una volta sola anche se uso il mio metodo.

Per ora il primo problema l'ho risolto facendo sì che ogni volta che viene modificata un'impostazione vengono riscritte anche quelle che sono rimaste uguali (se l'utente modifica un'impostazione, viene riscritto il file settings.txt).

Il secondo problema invece è che devo andare a leggere una precisa riga all'interno di un txt che contiene 280.000+ parole (divise da 'a capo'), e stavo cercando una soluzione più elegante di quella che ho scritto prima (che consiste praticamente nel leggerle tutte finché non arrivo alla riga che volevo io).
Metal Gabber è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2011, 23:25   #6
FrancoBross
Member
 
Iscritto dal: Dec 2010
Messaggi: 74
ma sentito parlare delle funzioni seek o lseek che muovono il cursore all'interno del file?
__________________
Scheda Madre : Asus P6T SE | Chipset : Intel X58 | Processore : Intel Core i7 920 @ 2666MHz | Memoria Fisica : 6144MB (3 x 2048 DDR3-SDRAM ) | Scheda Video : ATI Radeon HD 4890 Series | Hard Disk : Seagate STM3500418AS ATA Device (500GB) | DVD-Rom Drive : Optiarc DVD RW AD-7240S | Tipo Monitor : Nissei Sangyo L5AK6 - 15 pollici
FrancoBross è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2011, 14:21   #7
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
Io ho un problema analogo.

Ho una matrice che si modifica con l'esecuzione del programma... Ogni modifica deve essere scritta su file.
Al termine del programma, in cima al file, devo scrivere del testo .
Il problema è che se torno indietro con fseek ( o rewind ) quando vado a scrivere mi va a cancellare x caratteri, tanti quanti sono i caratteri da scrivere... Di conseguenza mi cancella parte della matrice...
Si può facilmente ovviare a questo mio problema aggiungendo \n a sufficienza all'inizio del file. È chiaro però che non è una soluzione molto bella...
Una soluzione sarebbe quella di memorizzare la matrice modificata dentro una linked list e fare un nuovo nodo ad ogni modifica della matrice.
Poi stampare il testo e a seguire ogni nodo della linked list. Lo voglio evitare...

C'è altro modo?
Segue un esempio del file:
Codice:
Testo

Matrice passo 1
Matrice passo 2
...
Matrice passo X
In rosso è la parte che viene aggiunta al termine dell'esecuzione della modifica della matrice
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2011, 15:21   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da kwb Guarda i messaggi
...cut...
Scusa, perchè non puoi/vuoi mettere il testo in coda alle modifiche della matrice?

Oppure potresti spezzare il file in due file diversi: uno per la matrice e sue modifiche, l'altro per il testo.
Oppure in tre file (sto immaginando a cosa ti possono servire, e tiro a indovinare):
- file con la sola matrice originale;
- file con le modifiche relative alla matrice
- file con il testo relativo alla matrice
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2011, 15:50   #9
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Scusa, perchè non puoi/vuoi mettere il testo in coda alle modifiche della matrice?

Oppure potresti spezzare il file in due file diversi: uno per la matrice e sue modifiche, l'altro per il testo.
Oppure in tre file (sto immaginando a cosa ti possono servire, e tiro a indovinare):
- file con la sola matrice originale;
- file con le modifiche relative alla matrice
- file con il testo relativo alla matrice
Non posso perchè le specifiche date richiedono che ci sia un unico file con tutto dentro formattato come ho scritto.
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2011, 16:14   #10
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da kwb Guarda i messaggi
Non posso perchè le specifiche date richiedono che ci sia un unico file con tutto dentro formattato come ho scritto.
Se il testo è modficabile a piacere e senza limiti allora non vedo altrernative al fatto di dover riscrivere ogni volta il file.
Se invece è limitabile, riservi all'inizio del file un tot di spazio solo per il testo: durante l'esecuzione del programma, le modifiche alla matrice le memorizzi in append al file, mentre al termine del programma, se il testo è stato editato, sovvrascrivi la porzione iniziale riservata del file con il testo stesso.
Puoi riempire lo spazio riservato al testo con il carattere nullo '\0'.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2011, 17:06   #11
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
Ho risolto mediante la funzione tmpfile() .
La matrice la memorizzo nel file temporaneo, poi quando ho finito, scrivo il testo e ricopio dal file temporaneo la matrice!
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2011, 17:07   #12
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
concordo con banryu, il formato del tuo file non ti consente di ricavare il numero di righe di testo dall'offset sul file

non puoi dire che il byte 398423 corrisponde sicuramente all'inizio della riga 20948

è per questo motivo che i database usano gli indici
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2011, 17:28   #13
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da kwb Guarda i messaggi
Ho risolto mediante la funzione tmpfile() .
La matrice la memorizzo nel file temporaneo, poi quando ho finito, scrivo il testo e ricopio dal file temporaneo la matrice!
Funziona, ma è una soluzione "meno efficiente" di quella che ti ho proposto prima: la mia ti evita di scrivere ogni volta il file, vengono solo appese le modifiche alla matrice. E se il testo non viene toccato non fa altro, se invece viene modificato comunque non occorre creare un nuovo file.
però tutto dipende dal fatto di avere o non avere un limite fisso di dimensione disponibile per il testo.

P.S.:
Io partivo dal presupposto che il programma, avviandosi, deve leggere il file per inizializzare la matrice; in pratica il file contiene lo storico di tutte le modifiche fatte ad una matrice originale che viene modificata e ricorda il suo stato e le varie transizioni per sempre (o almeno finchè esiste detto file )
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2011, 20:05   #14
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Funziona, ma è una soluzione "meno efficiente" di quella che ti ho proposto prima: la mia ti evita di scrivere ogni volta il file, vengono solo appese le modifiche alla matrice. E se il testo non viene toccato non fa altro, se invece viene modificato comunque non occorre creare un nuovo file.
però tutto dipende dal fatto di avere o non avere un limite fisso di dimensione disponibile per il testo.

P.S.:
Io partivo dal presupposto che il programma, avviandosi, deve leggere il file per inizializzare la matrice; in pratica il file contiene lo storico di tutte le modifiche fatte ad una matrice originale che viene modificata e ricorda il suo stato e le varie transizioni per sempre (o almeno finchè esiste detto file )
Il file di input ( che contiene la matrice di partenza ) NON corrisponde al file di output.
Continuo a non capire come vuoi risolvere tu il problema... A me sembra efficientissima questa soluzione, poichè:
- Il file finale viene modificato una e una sola volta ( aperto -> modificato -> chiuso )
- Il file temporaneo viene aperto una volta, ogni modifica viene messa in coda al file ( come è giusto che sia ) e, al termine delle modifiche, viene copiato tutto dentro il file finale di output. Il file temporaneo viene chiuso e cancellato.
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2011, 21:46   #15
Metal Gabber
Junior Member
 
Iscritto dal: Jul 2009
Messaggi: 13
Quote:
Originariamente inviato da FrancoBross Guarda i messaggi
ma sentito parlare delle funzioni seek o lseek che muovono il cursore all'interno del file?
sì, ma non so di quanti caratteri mi devo spostare in avanti a partire dall'inizio del file, visto che è composto da parole di diversa lunghezza...
Metal Gabber è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2011, 23:52   #16
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
Quote:
Originariamente inviato da Metal Gabber Guarda i messaggi
sì, ma non so di quanti caratteri mi devo spostare in avanti a partire dall'inizio del file, visto che è composto da parole di diversa lunghezza...
Non puoi anche tu fare come ho fatto io? Ovvero usare la funzione tmpfile(), ti salvi tutte le impostazioni su questo file temporaneo, e poi quando hai terminato, le sovrascrivi a quelle che ci sono già sul file
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2011, 06:33   #17
Metal Gabber
Junior Member
 
Iscritto dal: Jul 2009
Messaggi: 13
Per la scrittura delle impostazioni non c'è problema, visto che sono solo 2 le riscrivo ogni volta che avviene una modifica, ma io stavo chiedendo se c'era un modo più elegante per leggere una riga precisa da un file rispetto a quello che ho messo nel primo post.
Metal Gabber è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2011, 11:43   #18
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
Quote:
Originariamente inviato da Metal Gabber Guarda i messaggi
Per la scrittura delle impostazioni non c'è problema, visto che sono solo 2 le riscrivo ogni volta che avviene una modifica, ma io stavo chiedendo se c'era un modo più elegante per leggere una riga precisa da un file rispetto a quello che ho messo nel primo post.
A parte spostarsi con fseek alla riga... Non vedo altre soluzioni
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2011, 12:13   #19
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da kwb Guarda i messaggi
A parte spostarsi con fseek alla riga... Non vedo altre soluzioni
lo puoi fare solo se sai perfettamente ogni riga dove comincia, in pratica se hai un indice

l'indice ovviamente ha senso se occupa uno spazio che è una frazione del contenuto indicizzato, in quel caso lo si legge tutto in memoria e lo si usa da lì

oppure potresti benissimo imporre che ogni riga ha una dimensione in bytes fissa ( ovviamente è la dimensione massima che un'opzione può raggiungere )....i bytes extra li riempi di zero, però almeno così può crearti una formula semplice semplice per convertire offset <--> numero di riga
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2011, 23:39   #20
FrancoBross
Member
 
Iscritto dal: Dec 2010
Messaggi: 74
ma in che ambiente fai girare il tutto?
__________________
Scheda Madre : Asus P6T SE | Chipset : Intel X58 | Processore : Intel Core i7 920 @ 2666MHz | Memoria Fisica : 6144MB (3 x 2048 DDR3-SDRAM ) | Scheda Video : ATI Radeon HD 4890 Series | Hard Disk : Seagate STM3500418AS ATA Device (500GB) | DVD-Rom Drive : Optiarc DVD RW AD-7240S | Tipo Monitor : Nissei Sangyo L5AK6 - 15 pollici
FrancoBross è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Black Friday HONOR, prezzi giù fi...
AliExpress sfida Amazon sui prezzi: e-bi...
Gemini sotto accusa in Ungheria: per l'a...
Windows 11 può girare sulla NPU invece d...
MediaWorld diventa cinese: l'UE dice s&i...
Akamai potenzia il proprio cloud con due...
Steam, Valve cambia le regole: le revisi...
Canva licenzia (anche) per colpa dell'IA...
Axerta: l’IA traina la crescita delle te...
Galaxy A38, la batteria cresce ma il pre...
Notifica su Facebook: 'Effettuerai la mi...
Xbox pronta a dire addio allo studio di ...
Meta stacca la spina: fine del supporto ...
Scambio file senza limiti: Google porta ...
Taiwan sbarca a EICMA 2026: maxi scooter...
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: 18:26.


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