Pobieranie wartosci z pliku

Problemy i ich rozwiązania w C++.
Malutki
Bywalec
Bywalec
Posty: 46
Dołączył(a): czwartek, 7 sierpnia 2008, 10:46

Pobieranie wartosci z pliku

Post przez Malutki »

Panie Arkadiuszu jeśli można to proszę o podpowiedź jak pobierać wartości z pliku od lewej do prawej i jak nie będzie kolejnej wartości to opuszczać się o 1 wiersz niżej.Zrobiłem program który wczytuje dane z pliku i wyświetla największą wartość ,ale chciałbym żeby działał on na zasadzie jak powyżej ,narazie działa on w taki sposób że bierze wartość i schodzi o wiersz niżej.Proszę o podpowiedź i sugestie.

Zamieszczam kod programu i wyjaśnienie.


Code: Zaznacz cały

#include<iostream>
#include<fstream>
using namespace std;

int main() {

    double liczba ;
    int test=0;
    string nazwa ="liczby.txt";
    fstream plik("liczby.txt",ios::in);
    if(!plik)
    {
        cout << "Operacja otwierania pliku " <<nazwa <<" zakonczona bledem.:*( \n";
        cout <<"Plik nie istnieje lub zabroniono do niego dostepu .Skontaktuj sie z administratorem."<<endl;
    }
    else
        {
            cout <<"Operacja otwierania pliku zakonczona powodzeniem :) \n\n";
            cout <<"Zaczynam czytanie pliku: "<<nazwa <<endl << endl;
        }
    while(!plik.eof()){
        plik >> liczba;
       
        if(test < liczba)
        {
           test=liczba;
//                      
        }
          
    }
    cout << "Najwieksza liczba w pliku jest liczba: " <<test <<endl << endl ;
    cout <<"Sprawdz czy sie nie myle przeciez jestem tylko maszyna :( \n \n";
    return 0;
}
plik liczby zawiera :

12 2320320320 - tu pobiera liczbę 12 a ja chciałbym jeszcze żeby sprawdził liczbę obok czyli: 2320320320
12
31
43
23
54
56
76
78
98
09
10
120
211221
211
122190
9879
4654654
646
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Pobieranie wartosci z pliku

Post przez Morfidon »

Tak jak zrobiłeś to nie działa? Wypisz sobie po tym wczytaniu

Code: Zaznacz cały

cout << liczba;
, powinno wypisać także liczbę po spacji.
Malutki
Bywalec
Bywalec
Posty: 46
Dołączył(a): czwartek, 7 sierpnia 2008, 10:46

Re: Pobieranie wartosci z pliku

Post przez Malutki »

Wielkie dzięki za odpowiedź rzeczywiście działa tylko ja za duże liczby dawałem i się nie mieściły w typie :)
rosiek
Nowicjusz
Posty: 3
Dołączył(a): sobota, 23 kwietnia 2011, 13:12

Re: Pobieranie wartosci z pliku

Post przez rosiek »

Witam.
Dołącze się do wątku bo mam problem zgodny z tematem.

Posiadam plik binarny, próbuje wpisać jego zawartość do wektora i niby wszystko ok poza tym że nie zapisuje mi do wektora wszystkich bajtów.
Rozmiar pliku to 256 bajtów a zapisuje tylko 250. Opuszcza bajty z offsetów od 0x09 do 0x0E, nie tyle z tych konkretnych offsetów co dane które się tam znajdują nieważnie w którym miejscu pliku są.
W załączniku dodaje plik testowy, należy zmienic rozszerzenie .txt na .bin

Pozdrawiam

Code: Zaznacz cały

#include <iostream>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

int main()
{
   ifstream hex("hextest.bin",  ios::in | ios::binary ); // otwarcie pliku

   vector<char> v; 
   
   char ch;               // wczytywanie do wektora
   while(hex >> ch)
      v.push_back(ch); 
      

   int od = 0, ile = 256; // wyświetlanie na ekran
   ile += od;

   for (int i=od, j = v.size(); i<j && i<ile; ++i)

      cout << v[i];
      
     
   
   cout << endl << "rozmiar wektora: " <<  v.size() << endl;
   system ("PAUSE");
   return 0;
}
rosiek
Nowicjusz
Posty: 3
Dołączył(a): sobota, 23 kwietnia 2011, 13:12

Re: Pobieranie wartosci z pliku

Post przez rosiek »

problem rozwiązany.

09,0A ,0B,0C,0D to białe znaki i operator ">>" je pomija.
należy użyć get()

Code: Zaznacz cały

.
.
.
while(hex.good())
    {
        ch = hex.get();
        if(hex.good())
        {
            v.push_back(ch);
            cout << v.back() ;
        }
    }
.
.
.
rosiek
Nowicjusz
Posty: 3
Dołączył(a): sobota, 23 kwietnia 2011, 13:12

Re: Pobieranie wartosci z pliku

Post przez rosiek »

Witam.
Kolejne pytanie :D
Spędziłem kilka godzin z google i niestety nie udało się znaleść odpowiedzi.

W poprzednim przykładzie wpisuje do wektora bajty po 8 bitów, teraz chciałbym odczytać z tego wektora dwa kolejne bajty jako 16 bitów.
np. w pliku mam 1D w pierwszym bajcie i 1D w drugim. Chciałbym uzyskac 1D1D lub w DEC 7453.
Jak to zrobić?
Pozdrawiam
Post Reply