Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    [c++] parametri funzione da caricare da file txt

    Salve a tutti e auguri a tuttE
    io avrei quest' attuale problemino di modifica codice di una funzione (init) per gestire un gruppo contenuto di valori numerici

    codice:
    init(vettore,42,2,3,5,6,7,11,12,13,14,18,20,23,25,26,29,32,38,40,42,48,50,51,52,60,62,63,64,66,67,69,71,73,74,75,78,79,82,85,86,87,88,89);
    semplicemente... (ma io non ho la minima idea di come fare) dovrei riuscire a caricare in automatico il contenuto di un file txt denominato gruppodesiderato.txt contenete i valori numerici intervallati da virgola.

    2,3,5,6,7,11,12,13,14,18,20,23,25,26,29,32,38,40,4 2,48,50,51,52,60,62,63,64,66,67,69,71,73,74,75,78, 79,82,85,86,87,88,89

    riuscendone anche estrapolare il numero (non fisso) ad esempio in questo caso sono 42 ma potrebbero variare...

    una volta estrapolato il numero di elementi e i valori intervallati da virgola dovrei riuscire a metterli all'interno di int che strutturalmente riceve 3 parametri:

    init(vettore , numerodielementi , elementiintervallatidavirgola);

    Grazie infinite a chi mi aiuta a caricare in run time questa funzione dei giusti parametri dinamici.


  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Devo ammettere di non aver capito la domanda ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    http://www.go4expert.com/articles/pa...nction-t17592/

    edit:

    ho sbagliato, pensavo cercasse di creare una funzione con un numero variabile di argomenti
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    Originariamente inviato da oregon
    Devo ammettere di non aver capito la domanda ...
    Ciao Oregon e grazie lo stesso alex

    Dunque provo a rispiegarmi meglio...

    Ho un file gruppodesiderato.txt contenente, facciamo conto di avere molti meno valori rispetto a prima..., ad es solo questa riga:


    1,2,3,4,5


    e una funzione

    init(parametro1,parametro2,parametro3)

    il parametro1 è occupato da vettore.

    io dovrei riuscire attraverso codice

    a) a sapere (secondo l'esempio = 5) il numero di elementi all'interno del file txt.
    mettere quindi in run time questo valore al posto del parametro2

    b) mettere sempre in run time al posto del parametro3 tutti i numeri così come sono intervallati da virgola

    Al momento invece per poter usare il programmino devo mettere a mano , implementato nel codice, sia il parametro2 che il parametro3...

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Beh, stai usando una maniera contorta ...

    Perché la tua init non legge direttamente il file dopo che le hai indicato il nome?

    Oppure, apri il file, leggi i valori in un vettore e passa il vettore con il numero di elementi letti alla init.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    Originariamente inviato da oregon
    Beh, stai usando una maniera contorta ...

    Perché la tua init non legge direttamente il file dopo che le hai indicato il nome?

    Oppure, apri il file, leggi i valori in un vettore e passa il vettore con il numero di elementi letti alla init.

    la init in questione è questa:

    codice:
    template <class T>
    void init(vector<T>& v,unsigned int n, ...)
    {
        T temp;
        va_list vl;
        va_start(vl,n);
        for(unsigned int j=0;j<n;j++)
        {
            temp=va_arg(vl,T);
            v.push_back(temp);
        }
        va_end(vl);
    }
    Credo basti modificarla affinchè possa leggere il contenuto di gruppodesiderato.txt ma non so dove mettere le mani...

  7. #7
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    Sono arrivato a dinamicizzare fino a qui...


    codice:
    
    
    int numeroelementi = 5;
    //string stringanumerica="2,3,5,6,7";
    
    
    init (vettore,numeroelementi,2,3,5,6,7);
    Ovverosia adesso riesco a passare in dinamico i primi due valori vettore e numeroelementi
    ma il terzo parametro non so come fare...

    E dovrei riuscire a passare il 3° parametro come valori separati da virgola in dinamico.
    Come stringa non me li accetta...

    Per adesso provo a leggere semplicemente il file txt a mettere tutto in un vettore di interi... e poi a passare tutto il vettore alla funzione... se non leggete un EUREKA! Nisba e significa che attendo ancora il vostro preziosissimo aiuto!


    Grazie a tutti/e gli esperti e le esperte c++ 's world.

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Scusa, ma perchè non passi un array di interi come ultimo elemento al posto di una variadic list?

    Se vuoi anche una funzione con un numero variabile di argomenti implementi anche quella: semplicemente quando la chiami le fai costruire l'array di interi e chiami implicitamente quella che utilizza l'array di interi come ultimo argomento!

    Edit: scusa è un template, non un array di int, ma un array di T nel tuo caso, ad ogni modo il ragionamento non cambia!
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  9. #9
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    Originariamente inviato da Scara95
    Scusa, ma perchè non passi un array di interi come ultimo elemento al posto di una variadic list?

    Se vuoi anche una funzione con un numero variabile di argomenti implementi anche quella: semplicemente quando la chiami le fai costruire l'array di interi e chiami implicitamente quella che utilizza l'array di interi come ultimo argomento!

    Edit: scusa è un template, non un array di int, ma un array di T nel tuo caso, ad ogni modo il ragionamento non cambia!

    Ho provato a fare così:

    codice:
    //prova implementazione lettura file grupponumeri.txt creazione vector e passaggio di quest'ultimo alla funzione init
    
     ifstream myReadFile;
     myReadFile.open("grupponumeri.txt");
     char output[100];
     if (myReadFile.is_open()) {
     while (!myReadFile.eof()) {
    
    
        myReadFile >> output;
        cout<<output;
        
        //provo a trasformare lo stream in una stringa e poi questa in vettore...
        
        string streamoutput;
        
        streamoutput = output;
        
        //provo a stampare la stringa
        
        cout << "\n\n";
        cout << "Questa dovrebbe essere una stringa: ";
        cout << streamoutput;
        
        //adesso devo trasformare la stringa in vettore di stringhe e poi in vettore di interi...
        
        // Originale Definizione della Stringa e i variabili
    	//string data, orig = "A,B,C,D,E,F,G,H,I,J,K,L,M";
    	string data, orig = streamoutput;
    	unsigned int i = 0, set_size = orig.size()-(orig.size()/2);
    	vector<string> vect;
    
    	for(i=0;i<set_size;i++){
    		size_t pos = orig.find(",",0);
    		data = orig.substr(0,pos);
    		orig.erase(0,pos+1); // Prevenzione di duplicazione
    		vect.push_back(data);
    	}
        
        cout << "\n\n";
        
    	for(i=0;i<vect.size();i++){
    		cout<< i << ":" << vect.at(i) << endl;
    	}
    
    	//return 0;
    
        cin.get();
    
    
    //-------------------------------------------------------------------------------------------------------------------
    
    
    //fine lettura file e costruzione vettore...
    
    init (vettore,numeroelementi,vect);
    ma mi da questo erroraccio...

    139 E:\PROVA-DYN3-GENERATORE-COMBINAZIONI-CON-GRUPPO-DEFINITO-IMPLEMENTATO.cpp [Warning] cannot pass objects of non-POD type `class std::vector<std::string, std::allocator<std::string> >' through `...'; call will abort at Runtime


  10. #10
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Guarda, per leggere un file di soli numeri separati da virgole puoi fare velocemente così...
    (scusa se è C :S )
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    void stampa(int n, int *v);
    
    int main(void) {
    	FILE *fp;
    	int num[200], n_num = 0;
    	fp = fopen("fi.txt", "r");
    	while(fscanf(fp, "%d,", &num[n_num]) == 1)
    		n_num++;
    	fclose(fp);
    	stampa(n_num, num);
    	system("pause");
    	return 0;
    }
    
    void stampa(int n, int *v) {
    	int i;
        for(i = 0; i < n; i++)
    		printf("%d, ", v[i]);
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.