View Full Version : lettura file esterno con c++
So che per leggere un file esterno in c++ lo si può fare con fscanf,ma se ho un file tipo testo con stringhe e numeri come faccio?
Ci sono tanti metodi per leggere un file...per scegliere il migliore devi verificare com'è il formato del file...
E' un file suddiviso in colonne con larghezza standard ?
E' un file in cui le righe non hanno tutte lo stesso formato ?
E' un file che posso leggere con wordpad,notepad quindi come testo.....
Le righe non sono tutte uguali...
Per esempio c'è una riga del tipo:
cell ( #sito
#traffic
#location
)
ecco io in questo devo leggere il valore di traffic e sito ,come faccio?
Dipende dal formato dei dati...in generale si può procedere leggendo carattere per carattere o riga per riga (con fread o fgets) e analizzando il buffer...
Se il formato è fisso il miglior modo è utilizzare fscanf....cioè vedendo la riga sopra :
fscanf(f,"cell ( #%s\n#%s\n#%s )",s1, s2, s3);
Fammi un esempio di più righe di questo file....
Ti mando un esempio di questo tipo di file.
Io devo leggere sopratutto quello che sta dentro le parentesi....per poi creare con queste informazioni delle matrici.
Grazie
basta poco, che ce vo' :cool:
Guarda...non è così semplice...anzi...
In pratica quello che vuoi fare si chiama "parsing"...
Ovvero si tratta di riconoscere vari "comandi" e i loro parametri...
Ogni comando ha un suo formato ben preciso...
Ti faccio un esempio...
Leggi un carattere alla volta fino a quando non ottieni in lettura un carattere diverso da una lettera...un ciclo del genere...
char leggiParola(char *parola, int len, FILE * f)
{
int n = 0;
//elimino spazi, tab, ritorno carrello precedenti
do parola[0] = fgetc(f); while(isspace(parola[0]));
while(isalpha(parola[n]) && n < len-1)
{
n++;
parola[n] = fgetc(f);
}
fseek(f, -1, SEEK_CUR); //torno indietro per poter rileggere dopo il prox carattere
char tmp = parola[n+1];
parola[n+1] = '\0'; //carattere di fine stringa...
return tmp;
}
char leggiNumero(char *parola, int len, FILE * f)
{
int n = 0;
//elimino spazi, tab, ritorno carrello precedenti
do parola[0] = fgetc(f); while(isspace(parola[0]));
while(isnumber(parola[n]) && n < len-1)
{
n++;
parola[n] = fgetc(f);
}
fseek(f, -1, SEEK_CUR); //torno indietro per poter rileggere dopo il prox carattere
char tmp = parola[n+1];
parola[n+1] = '\0'; //carattere di fine stringa...
return tmp;
}
.....
.....
....
//comincio leggendo la prima parola
char buffer[1024];
leggiParola(buffer, 1024, f);
//Ora bisogna riconoscere quale comando è stato letto
//Ti faccio un esempio per il comando CELLS
if(!strcmp(parola,"CELLS"))
{
//Abbiamo riconosciuto il comando CELLS
leggiParola(buffer, 2, f);
//buffer[0] ora deve contenere una grafa aperta
if(buffer[0]!='{')
errore(); //Il programma deve terminare all'interno di questa funzione
//a questo punto abbiamo una grafa aperta e ora ci vuole un numero
leggiNumber(buffer, 1024, f);
//Ora dobbiamo aver letto un numero
if(!isnumber(buffer)) errore();
//questa stringa va convertita in un numero con le funzioni atoi o atof
....
}
Insomma tuto funziona così con una bella serie di if...poi è solo un esempi...per rendere più snella la scrittura del codice puoi passare alla funzione leggiParola la parola che vuoi che compaia in modo da far generare l'errore da quella funzione...
Te l'ho detto...non è banale...io in questo modo ci ho scritto un semplice cmpilatore C++...
Penso che tu (cionci) abbia fatto un fac-simile di routine che risolve (forse) un problema più ampio e con un'intersezione ridotta con il problema del nostro camacho.
Tipico errore della riutilizzabilità: in questo caso (a parte la tua buona volontà) non di una routine (che l'hai scritta di tuo pugno, immagino), ma di uno schema mentale.
ripeto: basta ... meno (diciamo 1/4), che ce vo' :cool: :cool:
cionci non ti offendere, si fa per confrontarsi .... :)
[comunque non vale bypassare il thread con messaggi in PVT ! :D ]
per esempio l'operatore Like (VB) potrebbe tornare molto utile :)
ma non ce n'è neanche bisogno.
mi sembra che il file sia piuttosto strutturato.
Originariamente inviato da a2000
[B]ma non ce n'è neanche bisogno.
mi sembra che il file sia piuttosto strutturato.
Dipende se lo è sempre...dipende se ha sempre la stessa indentazione...dipende se ha sempre la stessa struttura...dipende da molte cose...
Che intendevi per i messaggi privati ? Io non inviato/ricevuto alcun messaggio privato...
Originariamente inviato da cionci
[b]
Dipende se lo è sempre...dipende se ha sempre la stessa indentazione...dipende se ha sempre la stessa struttura...dipende da molte cose...
guarda, mi ricordo di avere fatto un "parsing" engine per il riconoscimento di certe parole chiave in un testo letterario in tagiko (!) con un codicillo in QB45 per una tesi ... :)
vogliamo provare ?
Originariamente inviato da a2000
[B]vogliamo provare ?
A fare cosa ?
Ah, ti volevo far notare che già nelle righe qui sotto la struttura non è fissa...
6 {
C; #site name
1; #sector number
1; #demand/traffic
LOC (9, 10);
LBC 13;
}
7 {
C; #site name
2; #sector number
2; #demand/traffic
LOC (9, 10);
}
guarda visto che mi hai stimolato, e visto che comunque è sempre un piacere parlare con te, :)
appena arrivo a casa ti mando una cosina che ti lascerà esterreffatto: non solo la struttura del file da leggere non era fissa ma non sapevo esattamente neanche il significato dei vari campi.
tutto in VBA naturalmente. :p
A rega! Che succede state a diventa troppo difficili.......
Inoltre io devo anche mettere gli elementi che leggo dentro cell o cell relation in matrici.......Se po fa?
ma che te devi stà a regolà, a ottimizzà i tempi der rosso dei semafori, dei sensi unici der traffico de Torvergata ?
Se po fà, se po fà ... te lo smonto e rimonto come vuoi il tuo file.
Ma il grafico va bene o no ?
Ciao
-----
|:mad:|
|:)|
|:rolleyes:|
-----
guarda io ti leggerei il tuo file in una strutturina del tipo:
CELLS(1 To NumCELLS)
.sitename
.sectornumber
.demandtr
.loc(1 To 2)
.lbc 'questo lo farei come variant array
e in una matrice di vicinanza (sempre a struttura dati) del tipo
CELLS_REL (1 To NumCELLS, 1 To NumCELLS)
.xxx
.DA(1 To 2)
.ecc
ti può andare bene ?
però devi dare qualche informazione in più sul significato dei dati.
:mad:
:)
:p
Ma questo file viene generato da qualche altro programma ? La sequenza delle strutture è fissa ? La formattazione è fissa ?
Allora...per quanto riguarda il grafico....perfetto.....alla grande!
Io il mio compito è quello di assegnare le frequenze disponibili su di una rete cellulare...
1-sto programmando in C++ quindi devo creare una routine di lettura per leggere i dati in input
2-Questi dati stanno dentro questo tipo di file
3-Le info che mi servono sono:
numero di siti
numero di celle
numero unita di traffico in ogni cella
4-Poi devo fare un array che contiene chiamato sito[celle] che mi dica per ogni cella quale è il suo sito
5-Un array chiamato cell[trx] che mi dica a quale cella ogni trx appartiene.le trx sono le unità di traffico.
6-Tutto ovviamente deriva dalla mia lettura del file...
7-Dalle cell relations tiro fuori le info sulle interferenze tra trx e le relazioni H tra le celle e questo va messo in matrice....
Insomma mi servono un bel po di info.........
I vari file che devo leggere sono tutti di questo formato...che se non ho capito male mi sembra di aver letto essere scritti in LaTex..
Boh so solo che il prof mi ha detto "E' una cazzata!!!!"..
Grazie Ciao Ragazzi
Ah dimenticavo....
site name è il nome del sito
sector number è il numero della cella
traffic demand è quante trx ci sono in una cella
in cell relation il numero indica l'interferenza tra celle e H la relazione di hand-over....
in effetti lo è :) :cool:
si può fare facilmente una routine che ti legge il file nelle tue matrici però, per quanto mi riguarda, o in VB o in Fortran.
altrimenti si può fare una routine di conversione del file in un formato più pulito e strutturato così da potere utilizzare una semplice routine in C++ di lettura sequenziale.
(qui andiamo allla grande con un tritatutto in VBA !! )
Faccè sapè
P.S.
Ah, allora non sono i semafori di Torvergata ma i telefonini ... ma tu guarda :p
Ma se io con un semplice fscanf leggo le varie stringe e poi metto quello che mi srve in array mediante dei cicli for?
Originariamente inviato da Camacho
[B]Ma se io con un semplice fscanf leggo le varie stringe e poi metto quello che mi srve in array mediante dei cicli for?
Te l'ho detto...se la struttura è fissà lo puoi benissimo fare...
Una struttura come questa...
1 {
A; #site name
1; #sector number
1; #demand/traffic
LOC (3, 5);
}
...sempre se fissa la puoi leggere benissimo con uno fscanf...
fscanf(f,"%d {\n %s; #site name\n %d; #sector number\n %d; #demand/traffic\n LOC (%d, %d);\n }",............);
Mi raccomando devono essere rispettati anche tutti gli spazi...
diciamo che leggo la prima,poi devo leggere la seconda che ha la stessa struttura faccio un ciclo for?
Nell'esempio che mi hai fatto quello che leggo dove lo memorizzo?
Lì non ho messo le strutture...ovviamente ti dovrai fare al tua bella struct...
struct cella {
int sector;
int traffic;
int locX, locY;
};
L'ideale sarebbe memorizzarla in un vettore...
Se il numero di celle è sempre 7 allora ti fa un vettore statico e accedi all'i-esima cella con l'indice (-1)...
Se a priori (prima di leggere il file) non conosci il numero delle celle allora ti conviene usare una lista...le conosci ?
L'unico problema che puoi incontrare è il fatto che il contenuto delle celle non è costante (non ci sono sempre gli stessi parametri, ad esempio LBC non c'è sempre), così come in CELL_RELATIONS non ci sono sempre gli stessi parametri in ogni relazione...
il numero di celle le conosco
in cell relations quando non cè H 1 vuol dire che H è 0,mentre se non cè il valore 0,xxxx vuol dire che è 0 anche quello...
l'importante che dal numero di celle tiro fuori il numero di traffic in ognuna di questa.
Quindi puoi usare un vettore statico...
Come inserisco in un vettore una struttura?
Definisci la struttura come ti ho detto prima e dopo basta fare:
cella vett[N];
N lo devi sostituire con il numero di celle...
/\/\@®¢Ø
01-03-2002, 09:38
Originariamente inviato da Camacho
[B]E' un file che posso leggere con wordpad,notepad quindi come testo.....
Le righe non sono tutte uguali...
Per esempio c'è una riga del tipo:
cell ( #sito
#traffic
#location
)
ecco io in questo devo leggere il valore di traffic e sito ,come faccio?
Se hai la garanzia che tutti gli elementi siano separati da uno o piu' spazi/tabulazioni/return ( come e' l'esempio che hai fatto tu ) allora e' relativamente semplice basta fare una cosa di questo tipo:
#include <string>
#include <vector>
#include <fstream>
using namespace std;
struct cell
{
string sito;
int traffic;
int location;
}
void readCell( istream& in , cell& c )
{
string a,b;
// queste fanno schifo ma servono a saltare la parola 'cell' e la '('
in >> a;
in >> b;
// potremmo controllare che a=="cell" e b==")" ed eventualmente lanciare un'eccezione o ritornare un valore di errore
in >> c.sito >> c.traffic >> c.location;
// anche qui dobbiamo eliminare la
// parentesi di uscita ed
// eventualmente controllare che sia
// appunto una ")"
in >> a ;
}
per leggere le strutture si potrebbe fare ( ad esempio )
ifstream input("file.txt");
int count; // quane ne dobbiamo leggere
cell* table = new cell[count];
for ( int i=0 ; i< count ; i++ )
readCell( input , table[i] );
Poi ci si puo' sbizzarrire , volendo :
che ne so, cambiare readCell in un operator >> cosi' da poter leggere le celle con un "input >> table[i]" :D
Ciao
Camacho, stammi a sentire, quello che ha inventato il deltaplano era un ingegnere della NASA.
Io mi sforzo ad essere correct, però non posso ammettere che la variabilità di spazi o piccole altre cose possa essere ritenuta un problema.
Non è un problema.
Addirittura si parla ancora del problema di non conoscere a priori le dimensioni di un vettore, di vettori statici ... (i vettori statici li uso solo per boosterare le velocità di calcolo).
Ma scusate ma li avete mai usati, per esempio, i variant array di VB ?
Se vuoi dimmi come deve essere fatto il file dati per essere letto senza problermi con una semplice routine in C++ e ti faccio un convertitore che si mangia il tuo file di testo e genera il file (i files) desiderato/i.
Altrimenti si può fare una routine DLL in Fortran che ti restituisce le tue matrici o sotto forma di strutture dati o di matrici propriamente dette.
E' anche per questo, cionci, che bisogna affrontare problemi grandi (per es. allocamento dinamico e calcolo con matrici 10^4 x 10^4) per risolvere quelli piccoli.
Lo strumento si impara ad usare bene solo quando si affrontano problemi pesanti.
Infatti non a caso il Prof. di Camacho gli ha detto che è una ca++ata.
La conclusione di tutto questo navigare nella sezione del forum è che chi usa il Fortran dovrà imparare il C++ ... per insegnarlo a quelli che lo usano. :(
P.S.
Scusate, ma credo che qualche voce critica e diversa non faccia male. :)
/\/\@®¢Ø
01-03-2002, 13:06
Ho dato una occhiata al file di esempio.
Se ho capito bene il tuo problema e' "solo"
quello di leggere il testo tra
"CELLS {"
e l'ultima }
Allora in tal caso il mio esempio puo' anche andare bene a patto di cambialo un poco. ( avevo capito male la struttura dei dati ).
Resta comunque valida l'idea di utilizzare ( secondo me ) l'operator >> sulle stringhe, visto che e' comodo per separare tutti gli elementi dell'input se questi sono divisi tra loro da spazi, come mi sembra sia il tuo caso ( a parte le coppie (a , b) che sono attaccate alle parentesi )
Originariamente inviato da a2000
E' anche per questo, cionci, che bisogna affrontare problemi grandi (per es. allocamento dinamico e calcolo con matrici 10^4 x 10^4) per risolvere quelli piccoli.
Lo strumento si impara ad usare bene solo quando si affrontano problemi [b]pesanti.
Infatti non a caso il Prof. di Camacho gli ha detto che è una ca++ata.
Primo in C++ non esistono vettori di variant...si può superare il problema usando la classe vector della STL, ma sinceramente non mi ci sono mai messo...
L'allocamento dinamico in C++ si può fare benissmo...ma è l'allargamento del vettore già allocato dinamicamente che non si può fare (bisogna crearne uno nuovo e spostare il contenuto in quello nuovo)...
Si possono benissimo usare le liste senza incorrere in problemi di allocazione...trovo un nuovo elemento, lo alloco, lo linko alla lista..
Io credo di aver affrontato problemi pesanti in C++...il compilatore C++ che ho fatto non mi sembra una cazzata e nemmeno la rete neurale per il riconoscimento ottico che ho fatto l'anno scorso (visto che a te piace la matematica)...
Credo di avere una buona esperienza di C/C++ (10 anni)...quindi non mi piace stare a sentire i discorsi che fai quando non sai di cosa stiamo parlando...imparati il C++ e poi ne riparliamo...
/\/\@®¢Ø : tu che ne pensi ?
Originariamente inviato da /\/\@®¢Ø
[B]Resta comunque valida l'idea di utilizzare ( secondo me ) l'operator >> sulle stringhe, visto che e' comodo per separare tutti gli elementi dell'input se questi sono divisi tra loro da spazi, come mi sembra sia il tuo caso ( a parte le coppie (a , b) che sono attaccate alle parentesi )
Concordo...anche perchè si suppone corretto il file...quindi non bisogna fare alcun controllo sintattico...
Ragazzi sucsatemi non voelvo che si creassero polemiche....è solo che io purtroppo non ho molto tempo per imparare benissimo il C++ in vista della tesi che è fra un mese(ma conto di farlo appena terminato) e quindi cercavo indizi...
Comuqneu io vi dico quello che devo creare:
un vettore chiamato sito[celle] che mi dica a quale sito o gni cella appartiene.
un vettore cell[trx] che mi dice a quale cella appartiene ogni traffic.
una matrice celle*celle che mi indichi quando se H=1 o a H=0 tra le celle.
una matrice celle*celle che mi dica se l'interferenza(valore 0,xxx presente in cell relation) è diversa da 0.
una matrice celle*canali che quando c'è in cell lbc con un valore,che indica un canale metta in matrice 1 tra la cella e il canale.
Grazie comunque della pazienza e scusatemi.
Ah i miei vettori sono tutti di idmensione fissa.
Primo in C++ non esistono vettori di variant...si può superare il problema usando la classe vector della STL, ma sinceramente non mi ci sono mai messo...
L'allocamento dinamico in C++ si può fare benissmo...ma è l'allargamento del vettore già allocato dinamicamente che non si può fare (bisogna crearne uno nuovo e spostare il contenuto in quello nuovo)...
Si possono benissimo usare le liste senza incorrere in problemi di allocazione...trovo un nuovo elemento, lo alloco, lo linko alla lista..
male, malissimo, la lista la devi fare solo quando ti sposi :)
Io credo di aver affrontato problemi pesanti in C++...il compilatore C++ che ho fatto non mi sembra una cazzata e nemmeno la rete neurale per il riconoscimento ottico che ho fatto l'anno scorso (visto che a te piace la matematica)...
bravo, 7+ :rolleyes:
Credo di avere una buona esperienza di C/C++ (10 anni)...quindi non mi piace stare a sentire i discorsi che fai quando non sai di cosa stiamo parlando...imparati il C++ e poi ne riparliamo...
tutto devi stare a sentire, anche quello che dice cionci.
/\/\@®¢Ø : tu che ne pensi ?
ARCO è un riflessivo, non si arrabbia per opinioni diverse, al massimo sorvola, come una freccia.
Comunque: alla prova dei fatti.
però questa volta ci mettiamo su 1000 € :)
(come la matrice 1000 x 1000) :cool:
Originariamente inviato da a2000
[B]Comunque: alla prova dei fatti.
però questa volta ci mettiamo su 1000 € :)
(come la matrice 1000 x 1000) :cool:
Ti ripeto che io a fare un programma del genere non ho nessun problema...
Magari non userò il metodo più semplice o quello + corto...ma stai tranquillo che arriverei ad un risultato...
Per la matrice 1000x1000 sono riuscito ad ottenere 3,2 secondi a 1333 Mhz...
/\/\@®¢Ø
01-03-2002, 19:30
Originariamente inviato da Camacho
[B]Ragazzi sucsatemi non voelvo che si creassero polemiche....è solo che io purtroppo non ho molto tempo per imparare benissimo il C++ in vista della tesi che è fra un mese(ma conto di farlo appena terminato) e quindi cercavo indizi...
Comuqneu io vi dico quello che devo creare:
un vettore chiamato sito[celle] che mi dica a quale sito o gni cella appartiene.
un vettore cell[trx] che mi dice a quale cella appartiene ogni traffic.
una matrice celle*celle che mi indichi quando se H=1 o a H=0 tra le celle.
una matrice celle*celle che mi dica se l'interferenza(valore 0,xxx presente in cell relation) è diversa da 0.
una matrice celle*canali che quando c'è in cell lbc con un valore,che indica un canale metta in matrice 1 tra la cella e il canale.
Grazie comunque della pazienza e scusatemi.
Ah i miei vettori sono tutti di idmensione fissa.
Allora... cerco di ricapitolare un po' per essere sicuro di aver capito giusto.
L'input mi sembra composto da quattro sezioni:
FORMAT , GENERAL INFORMATION , CELLS e CELLS_RELATIONS giusto ? E a te serve leggere le ultime due sezioni.
Piu' cose si possono dare per scontate , piu' semplice si puo' fare il codice: ad esempio, le varie linee con le informazioni sono sempre separate ? O potrebbe capitarmi sulla stessa riga
LOC (9, 10); LBC 13;
( tanto per fare un esempio ).
Poi: le prime tre righe di una CELL sono sempre uguali ?
( ovvero qualcosa del tipo
NOME; #comment
SETTORE; #commento
TRAFFIC; #commento
( anche se penso proprio di si visto che consistono solo del valore, commento a parte ).
Altra cosa che non mi e' chiara:
Altra cosa: come faccio a capire a quale cell appartiene un traffic ? con con il valore TRAFFIC penso, visto che compare uguale su piu' celle !
ma come ARCO (oh ARCO), da uno che tira d'intuito come te .... dai su !
per cionci:
io ti credo sulla parola, ma mi fanno 'specie' tutte le tue perplessità, i tuoi 'se' e i tuoi 'ma', rispetto a un problema assolutamente standard che dovresti avere affrontato e risolto, in 10 anni di attività Cplusplana, molte volte.
Evidentemente ti si sono presentate altre problematiche e forse ormai non siete più della nostra famiglia (più informatici che ingegneri) e di questo mi dispiace. :(
Ma dei 1000 € ? :cool:
P.S.
caldeggio vivamente informarsi sugli operatori (VB):
Like, Val, Instr, L_R_Trim$, ecc. ecc.
e trovare gli equivalenti C++ (una qualche decina di #include, I suppose) oppure scriverli ex-novo come esercizio per il weekend :)
Poi ragazzi, non vi vorrei usisionare, ma con una Excel_"Importazione guidata testo" e una botta di
For Each Cell in Worksheets("Foglio1").Range("A:AA"
a$ = Cell
If Like(a$, .......
If Like(a$, .......
If Like(a$, .......
.....
.....
Next Cell
vi passa la paura (o vi viene ?) :p
/\/\@®¢Ø
01-03-2002, 20:29
Non e' questione di tirare d'intuito.
Semplicemente Camacho ha detto che vuole
un vettore cell[trx] che mi dice a quale cella appartiene ogni traffic.
Pero' visto che nell'esempio ci sono
2 {
A; #site name
2; #sector number
3; #demand/traffic
LOC (3, 5);
}
5 {
B; #site name
2; #sector number
1; #demand/traffic
LOC (1, 10);
LBC 5 6;
}
che hanno lo stesso sector number, penso che intenda il contrario. ;)
P.S.:
Lo so che il mio nick fa schifo e nessuno lo capisce, ma hai dimenticato la M iniziale :D
/\/\@®¢Ø
01-03-2002, 20:52
uffff. la stanchezza :rolleyes:
ovviamente nel post precedente non intendevo dire che hanno lo stesso sector numbero, ma lo stesso number/traffic, anche l'esempio e' sballato, ma penso si capisca cosa intendevo dire :)
Caro Camacho,
decisamente, quassù qualcuno ti ama! :)
Guardati e agisci questo file.
La procedura di smontaggio del tuo file di testo (di cui devi dare il nome completo di path) dovrebbe già andare bene.
Può essere resa facilmente più semplice, corta, robusta, resistente alle anomalie/errori di struttura del file, in una parola metallizzata !
A questo punto si può generare il file (anche binario) con le matrici e i vettori che ti servono bell'e pronte per essere lette da C++.
Oppure una routine dil lettura DLL compilata, da richiamare all'interno del codice C++.
Oppure con un pò di pazienza (ma poca poca direi) tradurre la procedura da VB a C++.
Fai sapere. ;)
Buonanotte. :o
Site name mi dice il nome del sito nel quale si trova la cella.
sector number mi dice il numero della cella all'interno dello stesso sito.
demand\traffic indica quante antenne trx ci sono in quella cella.
mi interesa dire quindi non lo so.........trx 1 nella cella A1,trx 2 nella cella A2,trx 3 nella cella A2 e cosi via e creare un vettore
cell[trx] che mi dice :
cell[0]=A1
cell[1]=A2
cell[2]=A3
...............
la struttura è sempre lastessa e non avrai mai LBC o LOC sulla stessa riga.
Comunque LOC non mi serve.
Grazie
visto i lfile...bello! ma come lo leggo da c++?
E' sicuro si?
mi mancano le trx alle celle
Grazie
Originariamente inviato da Camacho
[B]visto i lfile...bello! ma come lo leggo da c++?
E' sicuro si?
mi mancano le trx alle celle
Grazie
Ti ripropongo tre soluzioni:
1) generare un file con le matrici e i vettori che ti servono bell'e pronte per essere lette da una routine di lettura sequenziale in C++.
2) routine di lettura DLL compilata, da richiamare all'interno del codice C++, che ti restituisce i vettori richiesti.
3) tradurre la procedura da VB a C++.
Una volta letto il file di testo, comporre il vettore delle trasmissioni alle celle è un problema molto semplice, fidaty. :)
Originariamente inviato da Camacho
[B]visto i lfile...bello! ma come lo leggo da c++?
E' sicuro si?
mi mancano le trx alle celle
Grazie
come un preservativo.
Secondo te quale è la migliore?
per il tuo prof la 3)
per te la 2)
per me la 1)
Camacho, prepara la Pajata ch'arivo ... :p
se la 1 è per te la 3 per il prof la 2 come la faccio io?
Originariamente inviato da Camacho
[b]Secondo te quale è la migliore?
ho inteso "qual'è la migliore" soluzione per te, per avere tu la soluzione più semplice.
per il resto te le posso fornire io in cambio di Pajata :D
beninteso, i test di controllo e validazione della routine sono a carico tuo, io porto il vino, però :p
beh poi la aggiutso si
ok
e come te la faccio la pajata
quella che ritieni migliore per me.......
co a ricetta de a Nonna.
so de bocca buona sa'. nun te preoccupa': magno tutto. :D
senno' me manni a ricetta via emaile e te passo codice ABI, CAB e conto corente che me arifornisco io. :)
a Camacho, i codici, quelli bboni, stanno a 1 € a riga ! :cool:
che, te sei perplito ? :(
me sa che s'è perplito davero. :(
magari è di quartieeree Prati ... mah. :(
mica te capisco,ma che stai a di?
ca++o, alla buon'ora :eek:
te sto a di' che al ristorante almeno lo devi di' er menu' che preferisci. :p
famme sape' in fretta, che tra un po' ve lasso che aricomincio a lavora' sur serio. :cool:
Camachooooooo
ihuuuuuuu
c'è nessunoooo !
Scusami ma ho avuto probloemi con il computer
Sai a me servirebbe una routine di letture che poi applico bene al c++......quindi è meglio la n 2.
Ciao grazie
eh, no bello: scusa debole. ;)
se vuoi diventare un manager (come vuoi, lo so) devi imparare la:
" .... prima regola del comando: ogni cosa è colpa tua ..."
da "Bugs Life" Dysney-Pixar - 1998
e la seconda regola dice che devi sempre motivare te stesso e chi ti sta intorno e quindi me devi di' che nessuno t'ha proposto una soluzione più fica della mia ;) :D :cool:
Proposte meglio della tua non ce ne sono,anche perchè ho parlato solo con te,quindi.non ci ho niente..
Che ne dici della prima proposta?
Ah una cosa ho provato il file in vb che mi hai mandato con un altro benchmark..non funziona come mai..forse le dimensioni?
Ciao
in generale, non abbiamo problemi di dimensioni ... ;)
funziona, funziona.
se non è più grande di 2Mb (zippato) me lo puoi mandare a:
aa2000@inwind.it
così facciamo un test più realistico.
Guarda che avanzo una [/siz] ;)
Se non mi trattengo,penso che per la prima volta mi farò cacciare da un forum.
Penso che l'arroganza e i toni usati da qualcuno siano sfuggiti al moderatore.
ucci ucci sento odor di lamerucci...:rolleyes:
LordYayo
11-03-2002, 10:07
Nota: questa sezione è nn moderata ma per questo nn vuol dire che si possa dire e fare tutto ciò che si vuole.
Credo che a2000 dovrebbe, come fanno notare oramai diversi utenti, darsi una calmata. Ho letto tutto il thread, ho capito veramente poco perchè nn è il mio campo tecnico questo, ma una cosa è sicura se chiedo al macellaio carne e lui mi da pesce nn mi va bene! Così se chiedo aiuto in C++ e mi si da solo qualche suggerimento che il più delle volte è sterile e criptico in VBA mi sorge il dubbio che mi stanno pigliando per i fondelli.
In più nelle ultime battute sembra quasi che ci sia sott'inteso un'offerta di lavoro: io faccio codice - tu dai soldi... il che nn mi piace per nulla... scrivetevi in privato...
1) nessuno scambio, è tutto gratis.
2) è stata proposta solo una soluzione diversa che poteva essere accettata o rifiutata.
3) mi sembra ci sia coerenza con il titolo della sezione:
"Discussioni sui principali linguaggi di programmazione; da ASP a C++ passando per Perl e Assembler."
Tranquilli non c'è nessuna offerta di lavoro o altro.io chiedevo solo aiuto per la tesi. Mi dispiace se si è generato qualche problema
LordYayo
11-03-2002, 14:50
Originariamente inviato da a2000
[B]1) nessuno scambio, è tutto gratis.
2) è stata proposta solo una soluzione diversa che poteva essere accettata o rifiutata.
3) mi sembra ci sia coerenza con il titolo della sezione:
"Discussioni sui principali linguaggi di programmazione; da ASP a C++ passando per Perl e Assembler."
1) Meglio così
2) Vero. Peccato che l'hai menata per tutto il thread con sto VBA quando la richiesta era per C++
3) Io sono intervenuto perchè diversi utenti mi hanno segnalato il thread, qualcosa secondo loro nn andava... tutto qui. Discuti pure...
Originariamente inviato da a2000
[B]
3) mi sembra ci sia coerenza con il titolo della sezione:
"Discussioni sui principali linguaggi di programmazione; da ASP a C++ passando per Perl e Assembler."
a me non sembra assolutamente in coerenza con quanto chiesto nel thread.
grazie lufo, sei un amico. ;)
Originariamente inviato da a2000
[B]grazie lufo, sei un amico. ;)
no, ti sbagli.
no.
il migliore amico dell'uomo.
in senso stretto.
con la psicologia tipica del branco.
comunque piano piano si stanno scoperchiando anche i sepolcri imbiancati dalla neve di Cogne.
Originariamente inviato da Camacho
[B]Tranquilli non c'è nessuna offerta di lavoro o altro.io chiedevo solo aiuto per la tesi. Mi dispiace se si è generato qualche problema
a Camacho, vabbe' che sei de la grande Roma, ma te la cavi proprio con poco. :(
Se devi fare la tesi, esercitati, articola meglio il tuo pensiero: ti ha dato fastidio l'offerta di aiuto alternativa al C++ o ti è servita.
E ti serve ancora o no ? ;)
Grazie comunque perchè mi è servita.....ora cerco di riportare quello che mi hai dato in C++
Ciao
p.s. Sono JUVENTINO
Originariamente inviato da Camacho
[B]Grazie comunque perchè mi è servita.....ora cerco di riportare quello che mi hai dato in C++
Ciao
p.s. Sono JUVENTINO
gli è servita. :)
serviti. ;)
p.s. Mamma mia, e come fai ? :D
allora è vero che sei dei quartieri bene. :p
Originariamente inviato da a2000
[B]no.
il migliore amico dell'uomo.
in senso stretto.
con la psicologia tipica del branco.
comunque piano piano si stanno scoperchiando anche i sepolcri imbiancati dalla neve di Cogne.
continua pure ad offendere...
mi dispiace. non mi diverte.
ma penso che un punto di vista diverso in questo campo può essere più prezioso di una ricetta.
anche se a prima vista può sembrare solo 'filosofia'.
se poi incrociare un pò sul serio, un pò per scherzo, il ferro delle opinioni deve diventare un fatto personale ed equivalere a farsi dei "non amici" ...
se rispondi in maniera inerente a ciò che si chiede nei thread, nulla da dire.
E se magari la smettessi di denigrare sempre o comunque le soluzioni degli altri, molte diatribe inutili, si potrebbero evitare.
scusa.
ti chiedo scusa. davvero. :(
in bocca al ... lufo. :)
ciao bello.
Ho visto cose che voi umani non potreste immaginarvi: navi da combattimento in fiamme al largo dei bastioni di Orione....
E ho visto i raggi B balenare nel buio vicino alle porte di Tannoiser.
E tutti quei momenti andranno persi nel tempo come lacrime nella pioggia.
E' tempo di morire.
Originariamente inviato da cionci
Guarda...non è così semplice...anzi...
In pratica quello che vuoi fare si chiama "parsing"...
Ovvero si tratta di riconoscere vari "comandi" e i loro parametri...
Ogni comando ha un suo formato ben preciso...
Ti faccio un esempio...
Leggi un carattere alla volta fino a quando non ottieni in lettura un carattere diverso da una lettera...un ciclo del genere...
char leggiParola(char *parola, int len, FILE * f)
{
int n = 0;
//elimino spazi, tab, ritorno carrello precedenti
do parola[0] = fgetc(f); while(isspace(parola[0]));
while(isalpha(parola[n]) && n < len-1)
{
n++;
parola[n] = fgetc(f);
}
fseek(f, -1, SEEK_CUR); //torno indietro per poter rileggere dopo il prox carattere
char tmp = parola[n+1];
parola[n+1] = 'Originariamente inviato da cionci
Guarda...non è così semplice...anzi...
In pratica quello che vuoi fare si chiama "parsing"...
Ovvero si tratta di riconoscere vari "comandi" e i loro parametri...
Ogni comando ha un suo formato ben preciso...
Ti faccio un esempio...
Leggi un carattere alla volta fino a quando non ottieni in lettura un carattere diverso da una lettera...un ciclo del genere...
char leggiParola(char *parola, int len, FILE * f)
{
int n = 0;
//elimino spazi, tab, ritorno carrello precedenti
do parola[0] = fgetc(f); while(isspace(parola[0]));
while(isalpha(parola[n]) && n < len-1)
{
n++;
parola[n] = fgetc(f);
}
fseek(f, -1, SEEK_CUR); //torno indietro per poter rileggere dopo il prox carattere
char tmp = parola[n+1];
parola[n+1] = '\0'; //carattere di fine stringa...
return tmp;
}
char leggiNumero(char *parola, int len, FILE * f)
{
int n = 0;
//elimino spazi, tab, ritorno carrello precedenti
do parola[0] = fgetc(f); while(isspace(parola[0]));
while(isnumber(parola[n]) && n < len-1)
{
n++;
parola[n] = fgetc(f);
}
fseek(f, -1, SEEK_CUR); //torno indietro per poter rileggere dopo il prox carattere
char tmp = parola[n+1];
parola[n+1] = '\0'; //carattere di fine stringa...
return tmp;
}
.....
.....
....
//comincio leggendo la prima parola
char buffer[1024];
leggiParola(buffer, 1024, f);
//Ora bisogna riconoscere quale comando è stato letto
//Ti faccio un esempio per il comando CELLS
if(!strcmp(parola,"CELLS"))
{
//Abbiamo riconosciuto il comando CELLS
leggiParola(buffer, 2, f);
//buffer[0] ora deve contenere una grafa aperta
if(buffer[0]!='{')
errore(); //Il programma deve terminare all'interno di questa funzione
//a questo punto abbiamo una grafa aperta e ora ci vuole un numero
leggiNumber(buffer, 1024, f);
//Ora dobbiamo aver letto un numero
if(!isnumber(buffer)) errore();
//questa stringa va convertita in un numero con le funzioni atoi o atof
....
}
Insomma tuto funziona così con una bella serie di if...poi è solo un esempi...per rendere più snella la scrittura del codice puoi passare alla funzione leggiParola la parola che vuoi che compaia in modo da far generare l'errore da quella funzione...
Te l'ho detto...non è banale...io in questo modo ci ho scritto un semplice cmpilatore C++... '; //carattere di fine stringa...
return tmp;
}
char leggiNumero(char *parola, int len, FILE * f)
{
int n = 0;
//elimino spazi, tab, ritorno carrello precedenti
do parola[0] = fgetc(f); while(isspace(parola[0]));
while(isnumber(parola[n]) && n < len-1)
{
n++;
parola[n] = fgetc(f);
}
fseek(f, -1, SEEK_CUR); //torno indietro per poter rileggere dopo il prox carattere
char tmp = parola[n+1];
parola[n+1] = 'Originariamente inviato da cionci
Guarda...non è così semplice...anzi...
In pratica quello che vuoi fare si chiama "parsing"...
Ovvero si tratta di riconoscere vari "comandi" e i loro parametri...
Ogni comando ha un suo formato ben preciso...
Ti faccio un esempio...
Leggi un carattere alla volta fino a quando non ottieni in lettura un carattere diverso da una lettera...un ciclo del genere...
char leggiParola(char *parola, int len, FILE * f)
{
int n = 0;
//elimino spazi, tab, ritorno carrello precedenti
do parola[0] = fgetc(f); while(isspace(parola[0]));
while(isalpha(parola[n]) && n < len-1)
{
n++;
parola[n] = fgetc(f);
}
fseek(f, -1, SEEK_CUR); //torno indietro per poter rileggere dopo il prox carattere
char tmp = parola[n+1];
parola[n+1] = '\0'; //carattere di fine stringa...
return tmp;
}
char leggiNumero(char *parola, int len, FILE * f)
{
int n = 0;
//elimino spazi, tab, ritorno carrello precedenti
do parola[0] = fgetc(f); while(isspace(parola[0]));
while(isnumber(parola[n]) && n < len-1)
{
n++;
parola[n] = fgetc(f);
}
fseek(f, -1, SEEK_CUR); //torno indietro per poter rileggere dopo il prox carattere
char tmp = parola[n+1];
parola[n+1] = '\0'; //carattere di fine stringa...
return tmp;
}
.....
.....
....
//comincio leggendo la prima parola
char buffer[1024];
leggiParola(buffer, 1024, f);
//Ora bisogna riconoscere quale comando è stato letto
//Ti faccio un esempio per il comando CELLS
if(!strcmp(parola,"CELLS"))
{
//Abbiamo riconosciuto il comando CELLS
leggiParola(buffer, 2, f);
//buffer[0] ora deve contenere una grafa aperta
if(buffer[0]!='{')
errore(); //Il programma deve terminare all'interno di questa funzione
//a questo punto abbiamo una grafa aperta e ora ci vuole un numero
leggiNumber(buffer, 1024, f);
//Ora dobbiamo aver letto un numero
if(!isnumber(buffer)) errore();
//questa stringa va convertita in un numero con le funzioni atoi o atof
....
}
Insomma tuto funziona così con una bella serie di if...poi è solo un esempi...per rendere più snella la scrittura del codice puoi passare alla funzione leggiParola la parola che vuoi che compaia in modo da far generare l'errore da quella funzione...
Te l'ho detto...non è banale...io in questo modo ci ho scritto un semplice cmpilatore C++... '; //carattere di fine stringa...
return tmp;
}
.....
.....
....
//comincio leggendo la prima parola
char buffer[1024];
leggiParola(buffer, 1024, f);
//Ora bisogna riconoscere quale comando è stato letto
//Ti faccio un esempio per il comando CELLS
if(!strcmp(parola,"CELLS"))
{
//Abbiamo riconosciuto il comando CELLS
leggiParola(buffer, 2, f);
//buffer[0] ora deve contenere una grafa aperta
if(buffer[0]!='{')
errore(); //Il programma deve terminare all'interno di questa funzione
//a questo punto abbiamo una grafa aperta e ora ci vuole un numero
leggiNumber(buffer, 1024, f);
//Ora dobbiamo aver letto un numero
if(!isnumber(buffer)) errore();
//questa stringa va convertita in un numero con le funzioni atoi o atof
....
}
Insomma tuto funziona così con una bella serie di if...poi è solo un esempi...per rendere più snella la scrittura del codice puoi passare alla funzione leggiParola la parola che vuoi che compaia in modo da far generare l'errore da quella funzione...
Te l'ho detto...non è banale...io in questo modo ci ho scritto un semplice cmpilatore C++...
Interessante:rolleyes:, si potrebbe avere un server da dove skarikare sto compilatore tuo?
Era un progetto per un esame...niente di eccezionale...le funzionalità supportate sono poschissime... Tra l'altro è anche scritto in maniera pessima :)
sono curioso lo stesso:o
Potresti dirmi dove skarikare il prog fatto e i sorgenti??????????
P.S: sei un grande:cool:
Originariamente inviato da Luc@s
[B]Potresti dirmi dove skarikare il prog fatto e i sorgenti??????????
:D :D :D
L'ho fatto in Borland Turbo C 4 anni fa...non so nemmeno se riuscirò a trovarlo...
Devo sentire l'altra persona che ci ha lavorato con me perchè credo di averlo perso...
Comunque accettava solo un tipo (interi a 16 bit)...le funzioni (quindi passaggio di variabili, possibilità di fare ricorsione etc. etc.)...scope locali (le variabili erano visibili solo all'interno del blocco in cui erano state dichiarate) e globali...for e if per il controlle del flusso...chiaramente i vari operatori aritmetici e logici...e poi ci avevo messo una funzione di input e una di output per gli interi...
Generava un sorgente assembly compilabile con il TASM (Turbo Assembler di Borland)...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.