Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-11-2008, 16:51   #1
MacLinuxWinUser
Senior Member
 
Iscritto dal: Jan 2004
Messaggi: 1736
[C++] Aiuto a fare il parsing di una linea

Ciao a tutti,
in un programma che uso,
leggo un file di testo in cui per ogni riga vi sono dei parametri non
separati ma inseriti nella stringa che di volta in volta leggo.
Il file di testo è composto da file che dovrei aprire, ma prima dovrei
ricavarne i parametri fondamentali dal loro stesso nome.

Mi è venuto in mente di leggere la riga con fscanf, conoscete metodi migliori ???

Esempio di uso:

lista file:

p_a1_b2.5_c3.txt
q_a2_b1.5_c4.txt
r_a3_b0.3_c5.txt
s_a4_b3.5_c6.txt

e pensavo di leggerla così:

char par0[1];
int par1=0,par3=0;
float par2=0.0;

fscanf(file,"%c_a%d_b_%f_c%d.txt",par0,&par1,&par2,&par3)


avete consigli migliori ???
MacLinuxWinUser è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2008, 18:50   #2
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da MacLinuxWinUser Guarda i messaggi
char par0[1];
Non bastava "char par0;"?
Quote:
Originariamente inviato da MacLinuxWinUser Guarda i messaggi
avete consigli migliori ???
Se il testo è formattato così rigorosamente direi che può anche andare bene, ma non ho mai provato a farlo. Solo, dovresti controllare il valore di ritorno di fscanf() dopo ogni chiamata per verificare che la lettura sia stata (probabilmente) corretta.

Altrimenti, puoi fare un piccolo parser manuale, non è difficilissimo. Ci vuole solo una maggiore dose di pazienza...
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 25-11-2008, 09:09   #3
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Probabilmente ti conviene leggere una riga alla volta (cosi' hai gia' il nome del file completo) e poi estrarre da questa i parametri che ti interessano usando la strtok.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 25-11-2008, 09:31   #4
MacLinuxWinUser
Senior Member
 
Iscritto dal: Jan 2004
Messaggi: 1736
strtok ?????

e sarebbe ?
MacLinuxWinUser è offline   Rispondi citando il messaggio o parte di esso
Old 25-11-2008, 10:05   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da MacLinuxWinUser Guarda i messaggi
strtok ?????

e sarebbe ?
strtok è il migliore amico del memory leak
Visto che sei in C++ leggi una stringa alla volta dal fstream con getline.
Poi usi un istringstream e fai il parsing come più ti aggrada, ad esempio usando getline con il delimitatore e scartando i caratteri che non servono con ignore.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 25-11-2008, 10:28   #6
MacLinuxWinUser
Senior Member
 
Iscritto dal: Jan 2004
Messaggi: 1736
In effetti volevo capire bene come fare il parsing....

apprezzo il tuo aiuto cionci, ma se ti fosse possibile,
potresti indicarmi un link o libro dove sia spiegato più in dettaglio
come fare parsing?

Grazie mille a tutti comunque...
MacLinuxWinUser è offline   Rispondi citando il messaggio o parte di esso
Old 25-11-2008, 10:36   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Non è che ci sia un libro, si tratta semplicemente di usare le funzionalità che ti mette a disposizione la libreria standard. Anche definire questo parsing significa solo ingigantire il problema.
Per ogni metodo o classe ti ho linkato la spiegazione e c'è anche un esempio.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 25-11-2008, 11:01   #8
MacLinuxWinUser
Senior Member
 
Iscritto dal: Jan 2004
Messaggi: 1736
Grazie !!!!
MacLinuxWinUser è offline   Rispondi citando il messaggio o parte di esso
Old 25-11-2008, 12:03   #9
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da cionci Guarda i messaggi
strtok è il migliore amico del memory leak
Non mi risulti alllochi memoria. Il problema e' che usa variabili statiche, quindi non e' thread safe.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 25-11-2008, 12:37   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Non mi risulti alllochi memoria. Il problema e' che usa variabili statiche, quindi non e' thread safe.
Certo che non la alloca, ma se prendo un puntatore ritornato da strtok, poi me lo porto avanti nel mio programma e poi decido di fare una delete sul puntatore...puff
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 25-11-2008, 13:00   #11
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da cionci Guarda i messaggi
Certo che non la alloca, ma se prendo un puntatore ritornato da strtok, poi me lo porto avanti nel mio programma e poi decido di fare una delete sul puntatore...puff
Non ottengo un leak comunque, e lo stesso discorso varrebbe nel caso si decidesse di fare un delete su puntatori dello stesso tipo (es: ctime()).

Cmq il suggerimento migliore e' quello che hai dato, riguardo all'uso degli stream. Sicuramente!
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2008, 12:32   #12
MacLinuxWinUser
Senior Member
 
Iscritto dal: Jan 2004
Messaggi: 1736
Ciao !!!

piccolo problema, la situazione è la seguente:

Esempio di uso:

lista file:

p_a1.0_b2.5_c3.5.txt
q_a2.0_b1.5_c4.2.txt
r_a3.0_b0.3_c5.4.txt
s_a4.0_b3.5_c6.txt

e pensavo di leggerla così:

char par0[1];
float par1=0,par3=0;
float par2=0.0;

fscanf(file,"%c_a%f_b_%f_c%f.txt",par0,&par1,&par2,&par3)


ma il programma si pianta a leggere l'ultima linea del file di esempio
in quanto non riconosce il 6.txt ed invece vorrebbe un 6.0.txt
come posso ovviare il problema ?
ho 3000 file, non posso rinominarli per ora....

a meno di non usare qualche script o regular expression che però non son capace ad usare...
MacLinuxWinUser è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2008, 13:20   #13
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da MacLinuxWinUser Guarda i messaggi
ma il programma si pianta a leggere l'ultima linea del file di esempio
in quanto non riconosce il 6.txt ed invece vorrebbe un 6.0.txt
come posso ovviare il problema ?
Per ovviare al problema secondo me fai molto prima a scrivere un po' di codice a mano. Ragiona attentamente sul formato che ti aspetti, fai un po' di controlli durante la lettura e in poco tempo ne verrai fuori con un parsing corretto. Il tutto IMHO, chiaramente.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2008, 14:37   #14
MacLinuxWinUser
Senior Member
 
Iscritto dal: Jan 2004
Messaggi: 1736
Dici di usare getchar?
Ho poca fantasia su cosa fare
MacLinuxWinUser è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2008, 14:48   #15
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da MacLinuxWinUser Guarda i messaggi
Ciao !!!

piccolo problema, la situazione è la seguente:

Esempio di uso:

lista file:

p_a1.0_b2.5_c3.5.txt
q_a2.0_b1.5_c4.2.txt
r_a3.0_b0.3_c5.4.txt
s_a4.0_b3.5_c6.txt

e pensavo di leggerla così:

char par0[1];
float par1=0,par3=0;
float par2=0.0;

fscanf(file,"%c_a%f_b_%f_c%f.txt",par0,&par1,&par2,&par3)


ma il programma si pianta a leggere l'ultima linea del file di esempio
in quanto non riconosce il 6.txt ed invece vorrebbe un 6.0.txt
come posso ovviare il problema ?
ho 3000 file, non posso rinominarli per ora....

a meno di non usare qualche script o regular expression che però non son capace ad usare...
Volendo cercare di cambiare il meno possibile: la fscanf() ritorna il numero di parametri che e' riuscita correttamente a leggere e ad assegnare alle tue variabili. Pertanto la fscanf() che hai scritto, nel caso non ci siano errori, dovrebbe sempre ritornare quattro.

A questo punto, potresti fare una fscanf() leggendo dei %d invece di %f, qualcosa del tipo

Codice:
int result = fscanf(file,"%c_a%d.%d_b_%d.%d_c%d.%d.txt",
                              par0,&par1,&par2,&par3,&par4,&par5,&par6);
In tal caso:
- se il nome e' del tipo r_a3.0_b0.3_c5.4.txt, otterrai result = 7
- se il nome e' del tipo s_a4.0_b3.5_c6.txt, otterrai result = 6 e non utilizzerai par6 perche' non contiene nulla di significativo.

NOTA: non l'ho provato, ho solo letto il manuale della fscanf()!
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2008, 16:13   #16
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Per ovviare al problema secondo me fai molto prima a scrivere un po' di codice a mano. Ragiona attentamente sul formato che ti aspetti, fai un po' di controlli durante la lettura e in poco tempo ne verrai fuori con un parsing corretto. Il tutto IMHO, chiaramente.
Quoto. Io consiglio un bell'automa a stati finiti.

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
La Russia blocca Snapchat e FaceTime: 'u...
Tesla FSD ora permette di scrivere messa...
Total War festeggia 25 anni: annunciato ...
Tante offerte Amazon rinnovate: sono ott...
Tanti articoli Apple scontati su Amazon:...
JBL a prezzi super: due modelli top tra ...
Sony e Bad Robot uniscono le forze: in a...
Il MIT rivela: l'IA può sostituir...
iPhone Air va in sconto: il nuovo iPhone...
Polaroid Now Gen 3 torna di moda: la fot...
Fallout 76: l'aggiornamento più g...
Prezzo folle per il top OLED da gaming: ...
Un nuovo processo antitrust per Apple in...
Amazon abbassa il prezzo delle AirPods 4...
Due super offerte Amazon: PC Desktop con...
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: 12:06.


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