• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Builder Jak wczytać z pliku do stringa ?

VPS Starter Arubacloud
0 głosów
745 wizyt
pytanie zadane 14 lipca 2015 w C i C++ przez Damianoo4444 Bywalec (2,700 p.)
Cześć, napotkałem problem, przy wczytywaniu z pliku do stringu.

Oto funkcja:

void pobierz()
{
        pliczek >> tlumaczenie >> slowo;
}

A oto błąd:

[C++ Error] Unit1.cpp(49): E2094 'operator>>' not implemented in type 'fstream' for arguments of type 'AnsiString'

Jeżeli nie można wczytać operatorem >> to czym ? :)

Dodatkowe pytanie, czym sie różni String od AnsiString i czemu String z dużej litery sie deklaruje w builderze ?

2 odpowiedzi

+2 głosów
odpowiedź 14 lipca 2015 przez Buby Pasjonat (19,590 p.)
wybrane 14 lipca 2015 przez Damianoo4444
 
Najlepsza

Cześć! Nie znalazłem w dokumentacji gettera, zwracającego dostęp do wskaźnika na zaalokowaną tablicę, więc raczej napisanie przeciążonego operatora odpada.

Jeśli możesz spróbuj wczytać tekst do klasycznego stringa z biblioteki standardowej, a później, jeśli będziesz tego potrzebować przekonwertuj go na AnsiString, korzystając z metody c_str().

Możesz napisać dla tej operacji odpowiednią funkcję.

Przykładowy kod:

AnsiString get_Word_From_File( char* file_Path )
{
   std::string temp_Buffer; 
   std::ifstream m_File( file_Path, std::ifstream::in );
   m_File >> temp_Buffer;
   m_File.close();
   return AnsiString( temp_Buffer.c_str() );
}

Nie jest to zbyt eleganckie, ale być może wystarczy - przerób twoją funkcję w odpowiedni sposób. Może to wyglądać tak:

void pobierz()
{
        std::string a, b;
        pliczek >> a >> b;
        tlumaczenie = a.c_str();
        slowo = b.c_str();
}

 

@Edit:

Jeszcze wyjaśnienie - AnsiString oraz String, to klasy bibliotek dostępnych w Builderze. Klasę String deklaruje się z dużej litery, aby nie kolidowała ze stringiem z biblioteki standardowej. Oba obiekty nie są kompatybilne ze strumieniami dostępnymi w C++, a w dokumentacji nie ma funkcji zwracającej wskaźnik na łańcuch znaków - gdyby taka istniała, wystarczyłoby napisać jedną funkcję, definiującą zachowanie dla operatora >> z argumentami referencji strumienia ifstream oraz AnsiString. Niestety takowa nie istnieje, więc musimy się posłużyć konstruktorem, przyjmującym łańcuch znaków C, bądź operatorem przypisania, który także przyjmuje łańcuch znaków.

Sam nie korzystam z Buildera, ale mam nadzieję, że pomogłem!

Pozdrawiam! ;)

komentarz 14 lipca 2015 przez Damianoo4444 Bywalec (2,700 p.)
Działa, dzięki wielkie ;D

Muszę się nauczyć posługiwać dokumentacją. Do tej pory nie miałem z nią styczności i wszystko to dla mnie czarna magia ;/

Dzięki wielkie jeszcze raz :D
+1 głos
odpowiedź 14 lipca 2015 przez pewolt Mądrala (5,790 p.)
komentarz 14 lipca 2015 przez Damianoo4444 Bywalec (2,700 p.)
To już przeglądałem, jest tam opis tylko operatora ">>" i getline(), a ja włąsnie potrzebuje wczytać dwa wyrazy rozdzielone spacją ;/
komentarz 14 lipca 2015 przez pewolt Mądrala (5,790 p.)
no to zaladuj sobie za pomoca getline i sprawdz czy w stringu jest spacja a text miedzy poczatekiem a spacja i spacja a koncem zapisz do kolejnych stringow

Podobne pytania

0 głosów
1 odpowiedź 175 wizyt
+1 głos
1 odpowiedź 414 wizyt
pytanie zadane 13 lipca 2015 w C i C++ przez Damianoo4444 Bywalec (2,700 p.)
0 głosów
1 odpowiedź 161 wizyt
pytanie zadane 24 sierpnia 2015 w C i C++ przez Dragonet.17 Pasjonat (19,630 p.)

92,454 zapytań

141,262 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...