Builder C++, odczytywanie danych liczbowych z pliku txt

Odpowiedz Nowy wątek
2011-09-07 11:19
Malvinka
0

Witam,

Mam mały problem, ale niestety nie mogę znaleźć rozwiązania. Posiadam plik temp.txt, w którym zapisane są liczby całkowite. Ma on postać

//23
24
25
23

itd.
//

Potrzebuję wczytać te dane do tablicy, powiedzmy int temp[100]. Na początku zrobiłam to przez getline, do tablicy charów, a potem przekonwertowałam na int (static_cast<int>()). Ale rodzi to dwa problemy. Po pierwsze muszę mieć dodatkowy fragment sprawdzający czy liczba jest jedno- czy dwucyfrowa. A po drugie jakiś taki strasznie dookoła ten kod wtedy jest... A w przyszłości dane mają być jako float...

Postanowiłam więc rozwiązać sprawę na wektorach. Mój kod ma teraz postać:

ifstrem in("temp.txt");
vector<int> v;
while(getline(in, line))
    v.push_back(StrToInt(line));
for (z=0; z<v.size(); z++)
    temp[z] = StrToInt(v[z])

Niestety dostaję błąd
E2034 Cannot convert 'string' to 'AnsiString'
przy linijce zamiany StrToInt

Domyślam się, że nie podoba im się, że wektor v jest stringiem, a nie AnsiStringiem. Ale z kolei getline przyjmuje tylko stringi, a nie AnsiStringi.

Może moglibyście mi podpowiedzieć jak to obejść?

Dziękuję z góry!
Mal

Pozostało 580 znaków

2011-09-07 11:41
0
vector<int> v;
int liczba;
while(in >> liczba)
    v.push_back(liczba);

Gdy się nie wie, co się robi, to dzieją się takie rzeczy, że się nie wie, co się dzieje ;-)

Pozostało 580 znaków

2011-09-07 11:47
Malvinka
0

Dziękuję!

Początkująca jestem, ale się uczę ;)

Możesz jeszcze podpowiedzieć dlaczego to tak działa? Nie do końca rozumiem tutaj warunku while in>>liczba. Dlaczego to działa bez getline? ;)

Dziękuję jeszcze raz!
Mal

Pozostało 580 znaków

2011-09-07 11:54
0
in >> liczba

W tym miejscu wskaźnik odczytu z pliku poszukuje najbliższej liczby całkowitej wczytuje ją do buffora i zapisuje w kontenerze. Kiedy pętla robi obrót po raz drugi wskaźnik jest ustawiony za pierwsza liczbą i szuka znowu najbliższej liczby całkowitej, aż do napotkania EOF (end of file).
Getline pobiera całą linię, a tam masz nie tylko liczbę całkowitą ale także znaki \n\r, czyli w tym miejscu wczytujesz string "23\n\r"


Gdy się nie wie, co się robi, to dzieją się takie rzeczy, że się nie wie, co się dzieje ;-)

Pozostało 580 znaków

2011-09-07 11:59
Malvinka
0

Czaję :) Dziękuję!

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0