Piotr Tomasz Piotrowski

Piotr Tomasz Piotrowski Inżynier Testów,
Analityk Danych,
Menedżer, Działacz
społ...

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Witam,
Znam ogólny opis tej funkcji, ale mimo to nie rozumiem jak ja zastosować w programie. Może jakiś przykładowy program?
Chodzi o to aby zastosować ją do odczytu z pliku np. pierwszego szesnastkowo zapisanego bajtu danych, zapisania gdzieś wyniku odczytu i wyświetlenie go.
Pozdrawiam
Marcin Bońka

Marcin Bońka Programista, Neubloc
Polska Sp. z o.o.

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Witam,

No coz, najprostrzym proramem do czytania pliku tekstowego bylby chyba:


#include <iostream>
#include <fstream>

int main()
{
std::ifstream file;
char c;

file.open("test.txt");
if (file.is_open())
{
while (! file.eof())
{
file.get(c);
std::cout << c;
}
file.close();
}
return 0;
}


Czyta caly plik znak po znaku i pokazuje zawartosc na ekranie.

Pozdrawiam,
MarcinMarcin Bońka edytował(a) ten post dnia 25.09.09 o godzinie 12:44
Artur Kulik

Artur Kulik
http://www.dlafranka
.pl

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Piotr Tomasz Piotrowski:
Witam,
Znam ogólny opis tej funkcji, ale mimo to nie rozumiem jak ja zastosować w programie.

Przyklad Marcina mowi wszystko, ale jakbys mial mimo wszystko watpliwosci to zajrzyj do opisu:

http://www.cplusplus.com/reference/iostream/istream/get/
Piotr Tomasz Piotrowski

Piotr Tomasz Piotrowski Inżynier Testów,
Analityk Danych,
Menedżer, Działacz
społ...

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Dziekuję za dotychczasowe wpisy.
Jednak po uruchomieniu - mimo zrozumialej składni - program zaproponowany przez Pana Marcina nie działa zgodnie z oczekiwaniami, ponieważ wyświetla on nie pojedynczy znak, ale ciąg kilku znaków z pliku. Sprawdziłem to, bo dodatkowo uruchomiłem plik w edytorze heksadecymalnym i wiem jakie zawiera znaki.
Domyślam się, że pobiera on ze strumienia file za dużą porcję danych, ale dlaczego tak jest?
L P

L P podskala.net

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Wersja Marcina jest wręcz wzorcowa. Może jak dodasz "\n" do wyświetlanego znaku to rozwieje Twoje wątpliwości (bajt to bajt (char/uint8_t), 8 bitów i już).

L
Marek Dąbek

Marek Dąbek Software Engineer,
Intel Technology
Poland

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Piotr Tomasz Piotrowski:
Domyślam się, że pobiera on ze strumienia file za dużą porcję danych, ale dlaczego tak jest?

Kluczem jest while (! file.eof()) - pętla ta wypisuje wszystkie znaki aż do napotkania końca pliku..
Piotr Tomasz Piotrowski

Piotr Tomasz Piotrowski Inżynier Testów,
Analityk Danych,
Menedżer, Działacz
społ...

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Marek Dąbek:
Piotr Tomasz Piotrowski:
Domyślam się, że pobiera on ze strumienia file za dużą porcję danych, ale dlaczego tak jest?

Kluczem jest while (! file.eof()) - pętla ta wypisuje wszystkie znaki aż do napotkania końca pliku..
Sprawdziłem - to było to - po usunieciu pętli - program wyswietla pierwszy znak.
Dziękuje.
Juliusz Mikoda

Juliusz Mikoda Projektant,
programista

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Można też otworzyć strumień binarnie
std::ofstream("test.txt",std::ios_base::binary);
i użyć metody read. Zapisać do tablicy znakowej lub konwersja do innego typu.
Piotr Tomasz Piotrowski

Piotr Tomasz Piotrowski Inżynier Testów,
Analityk Danych,
Menedżer, Działacz
społ...

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Marcin Bońka:
Witam,

No coz, najprostrzym proramem do czytania pliku tekstowego bylby chyba:


#include <iostream>
#include <fstream>

int main()
{
std::ifstream file;
char c;

file.open("test.txt");
if (file.is_open())
{
while (! file.eof())
{
file.get(c);
std::cout << c;[/quote]> }[quote] file.close();
}
return 0;
}


Czyta caly plik znak po znaku i pokazuje zawartosc na ekranie.

Pozdrawiam,
MarcinMarcin Bońka edytował(a) ten post dnia 25.09.09 o godzinie 12:44
Podany program odczytuje znaki ze strumienia. Wyświetliłem te znaki w formacie szesnastkowym i nie są one takie jak oryginalnym otwieranym pliku z obrazem JPEG2000. Wiem ponieważ otworzyłem ten plik w edytorze heksadecymalnym.
Czy istnieją jakieś rozwiązania funkcji, które by czytały od razu strumień w formacie szesnastkowym, a nie znakowym? (Otwarcie pliku w trybie hex powoduje brak wyświetlenia czegokolwiek.) Może przy przetwarzaniu na format znakowy w trakcie czytania funkcją get występują jakieś zaokrąglenia?
Tomasz Kaczanowski

Tomasz Kaczanowski Ot, programista

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Piotr Tomasz Piotrowski:
Marcin Bońka:
Witam,

No coz, najprostrzym proramem do czytania pliku tekstowego bylby chyba:


#include <iostream>
#include <fstream>

int main()
{
std::ifstream file;
char c;

file.open("test.txt");
if (file.is_open())
{
while (! file.eof())
{
file.get(c);
std::cout << c;[/quote][/quote]> > }[quote][quote] file.close();
}
return 0;
}


Czyta caly plik znak po znaku i pokazuje zawartosc na ekranie.

Pozdrawiam,
MarcinMarcin Bońka edytował(a) ten post dnia 25.09.09 o godzinie 12:44
Podany program odczytuje znaki ze strumienia. Wyświetliłem te znaki w formacie szesnastkowym i nie są one takie jak oryginalnym otwieranym pliku z obrazem JPEG2000. Wiem ponieważ otworzyłem ten plik w edytorze heksadecymalnym.
Czy istnieją jakieś rozwiązania funkcji, które by czytały od razu strumień w formacie szesnastkowym, a nie znakowym? (Otwarcie pliku w trybie hex powoduje brak wyświetlenia czegokolwiek.) Może przy przetwarzaniu na format znakowy w trakcie czytania funkcją get występują jakieś zaokrąglenia?

Nie występuja żadne zaokrąglenia, może zachodzic jedynie konwersja niektórych znaków, jeśli plik masz otwarty w trybie tekstowym, otwóż w trybie binarnym... A sposób wyświetlania, jest zupełnie inną rzeczą...
Piotr Tomasz Piotrowski

Piotr Tomasz Piotrowski Inżynier Testów,
Analityk Danych,
Menedżer, Działacz
społ...

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Tomasz Kaczanowski:
Piotr Tomasz Piotrowski:
Marcin Bońka:
Witam,

No coz, najprostrzym proramem do czytania pliku tekstowego bylby chyba:


#include <iostream>
#include <fstream>

int main()
{
std::ifstream file;
char c;

file.open("test.txt");
if (file.is_open())
{
while (! file.eof())
{
file.get(c);
std::cout << c;[/quote][/quote][/quote]> > > }[quote][quote][quote] file.close();
}
return 0;
}


Czyta caly plik znak po znaku i pokazuje zawartosc na ekranie.

Pozdrawiam,
MarcinMarcin Bońka edytował(a) ten post dnia 25.09.09 o godzinie 12:44
Podany program odczytuje znaki ze strumienia. Wyświetliłem te znaki w formacie szesnastkowym i nie są one takie jak oryginalnym otwieranym pliku z obrazem JPEG2000. Wiem ponieważ otworzyłem ten plik w edytorze heksadecymalnym.
Czy istnieją jakieś rozwiązania funkcji, które by czytały od razu strumień w formacie szesnastkowym, a nie znakowym? (Otwarcie pliku w trybie hex powoduje brak wyświetlenia czegokolwiek.) Może przy przetwarzaniu na format znakowy w trakcie czytania funkcją get występują jakieś zaokrąglenia?

Nie występuja żadne zaokrąglenia, może zachodzic jedynie konwersja niektórych znaków, jeśli plik masz otwarty w trybie tekstowym, otwóż w trybie binarnym... A sposób wyświetlania, jest zupełnie inną rzeczą...
Dlaczego nic nie wyświetla jeżeli plik jest otwarty w formacie binarnym?
Tomasz Kaczanowski

Tomasz Kaczanowski Ot, programista

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Piotr Tomasz Piotrowski:
Dlaczego nic nie wyświetla jeżeli plik jest otwarty w formacie binarnym?

Napiszę tak "a u mnie działa". Napisz, co chcesz uzyskać i jak to robisz, a w wolnym czasie warto zajrzeć do książki z podstawami....
Artur Kulik

Artur Kulik
http://www.dlafranka
.pl

Temat: Zastosowanie funkcji "istream& get ( char& c )";

A mozesz wkleic swoj kod? Bedzie wiadomo o czym rozmawiamy. Bo pytania w stylu "a czemu nic nie wyswietla", sa chyba malo skuteczne, jesli chodzi o poszukiwanie odpowiedzi.
Piotr Tomasz Piotrowski

Piotr Tomasz Piotrowski Inżynier Testów,
Analityk Danych,
Menedżer, Działacz
społ...

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Zdziwiłem się gdy cos tak prostego nie działało, ale już jest wszystko w porządku. Dzieki.
Szymon Kubisiak

Szymon Kubisiak Developer aplikacji
mobilnych Android

Temat: Zastosowanie funkcji "istream& get ( char& c )";

Nie ma czegoś takiego jak "zapis szesnastkowy" w pliku. W pliku bajt jest bajtem - zapisanym "bajtowo".
Jak sobie to wczytasz do zmiennej "unsigned char" to można wyświetlić dziesiętnie (0-255), szestnastkowo(0-FF), ósemkowo(0-377), jako znak (A-Z itd) czy jakkolwiek inaczej sobie zamarzysz.

Następna dyskusja:

Długość funkcji




Wyślij zaproszenie do