Leggere matrice da file .txt

di il
11 risposte

Leggere matrice da file .txt

Buongiorno a tutti, premetto che sono novizio della programmazione con C++ e quindi credo che ai più questa domanda potrebbe apparire molto banale, ma per me non lo è.

Allora io ho un file . txt con dentro la seguente matrice(sono coordinate x y z):

1 2.5 6
1.5 6 8.5
2.5 8.6 10
3 9.5 12
Io vorrei semplicemente creare un programma che mi leggesse questi valori e mi memorizzasse la matrice, in modo tale da poter poi eseguire operazioni con essa (ma queste riguarderanno l'ampliamento del programma, per ora mi interessa riuscire a importare la matrice).
Avete qualche suggerimento?

Grazie davvero a tutti in anticipo

11 Risposte

  • Re: Leggere matrice da file .txt

    Non preoccuparti
    allora basta che
    ti definisci una matrice che ospiterà i dati nel tuo caso (x,y,z)
    esempio creazione matrice
    #include <iostream.h>
    
    #define max 10
    #define righe (max)
    #define colonne (max)
    #define altro (max)
    
    float Matrice[righe] [colonne] [altro];
    ti definisci una variabile float per ospitare i dati
    ti definisci un contatore tipo intero
    apri un file in lettura
    esegui un ciclo di lettura fino alla fine del file
    esempio di lettura file ed assegazione valori.
    #include <fstream.h>
    
    void main() 
    {
    int indice=0;
    int maxele,ind1,ind2,ind3;
    maxele= massimo delle righe della matrice
    ind1=0;ind2=0;ind3=0;
      ifstream OpenFile("cpp-input.txt");
      float f;
      while(!OpenFile.eof())
      {
        OpenFile.get(f);
        cout << f;
    if (indice > 2) { indice=0;ind1++;ind2++;ind3++; }
    if (ind1 >maxele) { errore }
    if (indice==0) { ind1= ind1 + indice; matrice[ind1] [ind2] [ind3]=f; }
    if (indice==1) { ind2= ind2 + indice; matrice[ind1] [ind2] [ind3]=f; }
    if (indice==2) { ind3= ind3 + indice; matrice[ind1] [ind2] [ind3]=f; }
    indice++;
      }
      OpenFile.close();
    }
    adesso correggi il codice unisci le 2 parti e il gioco e fatto
    spero di esserti stato d'aiuto
  • Re: Leggere matrice da file .txt

    @smalldragon ... la soluzione che proponi è completamente sbagliata ... non ha senso prevedere una matrice tridimensionale quando i dati sono in formato bidimensionale. E di conseguenza tutto il codice è sballato.

    Tenendo presente che i dati sono nel formato [riga][3] in quanto non si conosce il numero di righe ma le colonne sono sempre 3, basta semplicemente questo codice per leggere (e visualizzare) i dati
    
    #define MAXR 100
    
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
    	float mat[MAXR][3];
    
    	// legge dati
    	ifstream dati("c:\\dati.txt");
    	int r = 0;
    	while(!dati.eof())
    	{
    		dati >> mat[r][0] >> mat[r][1] >> mat[r][2];
    		r++;
    	}
    	dati.close();
    
    	// visualizza dati
    	int i;
    	for(i=0; i<r; i++)
    		cout <<  mat[i][0] << " " << mat[i][1] << " " << mat[i][2] << endl;
    
    	return 0;
    }
    
    Sono state previste un massimo di 100 righe (anche se non viene fatto alcun controllo sul massimo) ma se serve il codice può essere facilmente modificato per tenere conto dell'esatto numero di righe allocando dinamicamente la matrice.
  • Re: Leggere matrice da file .txt

    Vi ringrazio molto per l'aiuto! Adesso proverò a continuare il lavoro con il codice da voi postato!
  • Re: Leggere matrice da file .txt

    Ho provato a far funzionare il programma. Nessun problema in fase di compilazione, ma quanto avvio il debug mi visualizza solo una schermata nera vuota, anzichè i valori contenuti nel file. Vi posto il codice:
    #include "stdafx.h"
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
       #define MAXR 100
       float mat[MAXR][3];
    
       // legge dati
       ifstream dati("c:\\coordinate.txt");
       int r = 0;
       while(!dati.eof())
       {
          dati >> mat[r][0] >> mat[r][1] >> mat[r][2];
          r++;
       }
       dati.close();
    
       // visualizza dati
       int i;
       for(i=0; i<r; i++)
          cout <<  mat[i][0] << " " << mat[i][1] << " " << mat[i][2] << endl;
    
       return 0;
    }
    il file "coordinate.txt" si trova nel seguente percorso: "C:\\Users\Alessandro\Desktop\coordinate.txt"

    Sbaglio qualcosa riguardo il percorso del file .txt in C++?
  • Re: Leggere matrice da file .txt

    Per la "schermata nera" (che sarebbe la console DOS) aggiungi una linea per attendere un tasto prima del return, ad esempio

    getchar();
    return 0;

    Per il percorso, mi sembra ovvio che

    c:\\coordinate.txt

    non è la stessa cosa di

    C:\\Users\Alessandro\Desktop\coordinate.txt
  • Re: Leggere matrice da file .txt

    Infatti ho provato a scrivere il percorso completo del file, ma mi segnala alcuni errori in fase di compilazione che sembra siano dovuti all'uso delle lettere maiuscole nei nomi "Alessandro", "Desktop", "C:\\"...E' normale?
  • Re: Leggere matrice da file .txt

    E' normale se non raddoppi la \

    Devi scrivere

    "C:\\Users\\Alessandro\\Desktop\\coordinate.txt"
  • Re: Leggere matrice da file .txt

    Innanzitutto grazie per la pazienza!:) So di essere una frana ma ho iniziato ad avvicinarmi a C++ da qualche settimana.
    Ok adesso compila correttamente ma nella finestra DOS mi visualizza una riga in più, che non capisco cosa sia.
    Mi spiego meglio; quello che visualizzo nella finestra è questo:
    
    0 1 2 
    2 5 6
    3 6 7
    6 5 9
    -1.0374e+008 -1.0374e+008 -1.0374e+008
     
    Sai a cosa può corrispondere l'ultima riga?
  • Re: Leggere matrice da file .txt

    Per caso nel tuo file di dati alla fine c'è una riga vuota? Se è così eliminala.
  • Re: Leggere matrice da file .txt

    Perfetto! Grazie mille!
  • Re: Leggere matrice da file .txt

    Di nulla ...
Devi accedere o registrarti per scrivere nel forum
11 risposte