Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Odczyt danych z pliku txt do tablic

Ostatnio zmodyfikowano 2020-04-11 11:55
Autor Wiadomość
Shana_a
Temat założony przez niniejszego użytkownika
Odczyt danych z pliku txt do tablic
» 2020-04-09 14:35:48
Chciałabym wczytać dane z tego typu pliku i wstawić liczby do tablic.

A 4 23 54 64 65 76
B 3 45 45 23 34 34

Próbowałam zrobić to tak, aby pierwszy wyraz odczytało jako literę, a potem jako liczby i wstawiło je do tablic. Jednak nie do końca wiem jak to zrobić poprawnie z użyciem pętli.
P-176622
pekfos
» 2020-04-09 15:59:12
pierwszy wyraz odczytało jako literę, a potem jako liczby i wstawiło je do tablic.
I tak w pętli, dopóki możesz wczytywać liczby. Gdy spróbujesz wczytać "B" jako liczbę pojawi się błąd. Wtedy możesz zresetować flagę błędu i zacząć od nowa. Coś takiego będzie działać poprawnie, dopóki w pierwszej kolumnie w pliku nie będziesz mieć czegoś, co zaczyna się od poprawnej liczby. Jeśli nie możesz tak założyć, to możesz np wykorzystywać przejścia do nowych linii jako separatory. Patrz "trudne zadanie" w » Kurs C++ » Poziom 4Wczytywanie zawartości pliku, a kontrola błędów lekcja. Chyba że, jak w twoim przykładzie, liczb jest zawsze 6 - wtedy nie wiem jaki tu masz problem.
P-176623
Shana_a
Temat założony przez niniejszego użytkownika
» 2020-04-09 22:03:49
Patrzyłam już wcześniej na ten plik, ale nie jestem pewna, gdzie powinnam "wcisnąć" moją tablice. W tym wypadku cały czas pokazuje mi ostatnią cyfrę i nie wiem do końca dlaczego.

C/C++
#include <iostream>
#include <fstream>
#include <string>

using namespace std;
int tablica[ 5 ];
bool odczytajPlik( std::string sNazwaPliku )
{
    std::ifstream plik;
    plik.open( sNazwaPliku.c_str() );
   
    if( !plik.good() )
    {
        std::cout << "Nie udalo sie otworzyc pliku." << std::endl;
        return false;
    } //if
   
    while( true )
    {
        int iLiczba;
        char cZnak;
       
        plik >> iLiczba;
       
        if( !plik.fail() )
        for( int i = 0; i < 6; i++ )
        {
            tablica[ i ] = iLiczba;
           
        }
       
        else
        {
            if( plik.bad() )
                 return false;
           
            plik.clear();
            plik >> cZnak;
           
            if( !plik.fail() )
                 std::cout << "Znak = '" << cZnak << "'" << std::endl;
            else
            {
                if( plik.eof() )
                     break;
               
                return false;
            } //if
        } //if
    } //while
   
    for( int i = 0; i < 6; i++ )
    {
        cout << tablica[ i ] << endl;
    }
    std::cout << "Koniec pliku" << std::endl;
    return true;
}
using namespace std;

int main()
{
   
    if( odczytajPlik( "dane.txt" ) )
         std::cout << "Plik zostal poprawnie wczytany!" << std::endl;
   
    return 0;
}
P-176627
pekfos
» 2020-04-10 13:20:51
C/C++
for( int i = 0; i < 6; i++ )
{
    tablica[ i ] = iLiczba;
   
}
To robi dokładnie to, co jest napisane w kodzie. Czyli wypełnia całą tablicę tą samą wartością.
P-176628
nanoant20
» 2020-04-10 22:57:27
na ZEUSA, 12 liczb, chcesz upakować do tablicy 6 elementowej
ten fragment kodu naprowadzi Cię, co się dzieje,
sprawdź czy potrzebna jest ta pętla for

C/C++
int licznik { 0 }; //<-- wprowadzilem dodatkowa zmienna
while( true )
{
    int iLiczba { 0 };
    char cZnak;
   
    plik >> iLiczba;
   
    if( !plik.fail() )
    {
        //patrz na zmienna "i" w cout'cie
        for( int i = 0; i < 11; i++ )
        {
            tablica[ licznik ] = iLiczba;
            cout << "i := " << i << " tablica[" << licznik << "] - " << iLiczba << endl;
            licznik++;
            break;
        }
        //itd..
 
P-176631
Shana_a
Temat założony przez niniejszego użytkownika
» 2020-04-11 11:55:51
"na ZEUSA, 12 liczb, chcesz upakować do tablicy 6 elementowej"

Przepraszam, wstawiłam inny kod, próbowałam robić na innym pliku z mniejszą ilością danych.

Dziękuję nanoant20, Twój kod zdecydowanie mi pomógł zrozumieć tablicę. Dziękuję za pomoc.
P-176632
« 1 »
  Strona 1 z 1