Wczytywanie Zmiennych

0

Witam otóz mam plik o zawartosci:

123 345
567 789
.... .... i tak dalej

i chce aby '123' przypisano do zmiennej np a1, a '345' do a2
i tak dalej '567' do b1, i '789' do b2

czy jest to możliwe? jeżeli mozecie to dobrzy by było gdyby mógł znajdowac sie przecinek między dwoma liczbami.

albo np.
a1=123 a2=345
b1=567 b2=789

Będe wdzięczny za pomoc.

0

A nie prościej wczytywać to do tablic? Albo w ogóle do <vector> jakiegoś?
Jest to możliwe. Poczytaj o <fstream>

0
#include <fstream>
int main()
{
int tab[10];
fstream plik("pliczek.txt")//ewentaulnie podajesz ścieżkę do pliczku np "C:/pliczek.txt"
for(int i=0;i<10;i++)
{
pliczek >> tab[i]//wczytujesz z pliczku do tab[i] liczby stringi co tam se chcesz ale lepiej poczytaj o fstream
}
return 0;
}
0
Gelldur napisał(a)
#include <fstream>
int main()
{
int tab[10];
fstream plik("pliczek.txt")//ewentualnie podajesz ścieżkę do pliczku np "C:/pliczek.txt"
for(int i=0;i<10;i++)
{
pliczek >> tab[i]//wczytujesz z pliczku do tab[i] liczby stringi co tam se chcesz ale lepiej poczytaj o fstream
}
return 0;
}

Pomijając to że w kodzie jest tyle błędów że nie ma prawa działać, to powyższy algorytm nie rozwiązuje problemu, kolega chciał aby każda linia była zapisana osobno.
Jeżeli wiemy że w każdej linii są dokładnie 2 ciągi liczb to sprawa jest prosta, robimy to następująco:

#include <fstream.h>
#include <conio.h>  //Deklarujemy te dwie biblioteki aby potem przeczytać rezultat
#include <iostream.h> //Deklarujemy te dwie biblioteki aby potem przeczytać rezultat

int main()
{
int tab[100][2];  //dwu wymiarowa tablica, tab[x][0] to liczba a, natomiast tab[x][1] to liczba b
int a=0;
ifstream dane("dane.txt");  //przypisujemy zawartość pliku dane.txt pod zmienną dane, zamiast dane.txt możemy podać pełną ścieżkę

while(!dane.eof()){                  //!dane.eof()  - warunek ten sprawia że pętla zakańcza się gdy dojdzie do końca pliku
                   dane>>tab[a][0];      //czytamy liczbe a
                   dane>>tab[a][1];      //czytamy liczbe b
                   a++;                  //przechodzimy do następnej linii w wartościach tablicy
                   }
              
dane.close();   //zamykamy plik


//wypisujemy rezultat :)
for(int b=0;b<a;b++) cout<<"a"<<b+1<<": "<<tab[b][0]<<"     b"<<b+1<<": "<<tab[b][1]<<endl;
getch();
                      
return 0;
}

Problem pojawia się dopiero gdy nie wiemy ile mamy ciągów liczb w jednej linii ;) , wtedy trzeba się więcej pobawić.

0
#include <fstream>
using namespace std;
int main()
{
int tab[10];
fstream plik("pliczek.txt");//ewentaulnie podajesz ścieżkę do pliczku np "C:/pliczek.txt"
for(int i=0;i<10;i++)
{
plik >> tab[i];//wczytujesz z pliczku do tab[i] liczby stringi co tam se chcesz ale lepiej poczytaj o fstream
}
plik.close();//zamykamy plik i zapisują się dane z bufora do pliku
return 0;
}
Adaska napisał(a)

Pomijając to że w kodzie jest tyle błędów że nie ma prawa działać, to powyższy algorytm nie rozwiązuje problemu, kolega chciał aby każda linia była zapisana osobno.
Jeżeli wiemy że w każdej linii są dokładnie 2 ciągi liczb to sprawa jest prosta, robimy to następująco:

Pisalem to w poście więc miałem prawo pozjadać " ; " poza tym kod teraz działa sprawdziłem. I chyba źle napisałeś napisałeś iostream.h ? //to jest źle chyba

A odpowiedź na pytanie: tak jest to możliwe przykład poniższy kod:

#include <fstream>
using namespace std;
int main()
{
int tab[10][10];//możesz użyć vektora i powiększać go jeżeli nie znasz rozmiaru
fstream plik("pliczek.txt");//ewentualnie podajesz ścieżkę do pliczku np "C:/pliczek.txt"
for(int i=0;i<10;i++)//i jeżeli nie znasz rozmiaru możesz napisać while(plik >> tab[i][0] >> tab[i][1])//bedzie pobierało dane dopóki są i odpowiednio w pętli while zwiększasz i
{
plik >> tab[i][0] >> tab[i][1];//wczytujesz z pliczku do tab[i] liczby stringi co tam se chcesz ale lepiej poczytaj o fstream
}
plik.close();//zamykamy plik i zapisują się dane z bufora do pliku
return 0;
0

W kompilatorze na którym pracuje muszę pisać iostream.h ;-)
Kompiluje mój kod i wszystko ładnie hula więc nie doczepiaj się jak nie sprawdziłeś.

Teraz ten twój program działa tylko że jest pewien problem. Mianowicie jest on napisany do pliku z dokładnie 10 liczbami ;]

0

Dobrze dlaetego napisałem ,że chyba masz błąd z tym iostream.h ale skoro u ciebie ok to good

Co do mojego programu to napisałem w komentarzu jak zrobić aby było wszystko dynamicznie jak nie znamy rozmiaru tablicy

0

Dziękuje wszystkim za pomoc, a szczególnie Adaska, o to właśnie chodziło :)
Można zamknąć temat

0
Adaska napisał(a)

W kompilatorze na którym pracuje muszę pisać iostream.h ;-)
Więc masz kompilator starszy od Gelldura. U mnie żaden kompilator nie chciał tego przetrawić (MSVC 2010, g++ 4.4.1) - może to dlatego, że są w miarę zgodne ze standardem i nie próbują zachować kompatybilności z tym, co było wcześniej? Standard nic nie mówi o takich rzeczach, jak iostream.h czy fstream.h.

0

Pracuje na dev-c++ 4.9.9.2 bo na takim będę pisał maturkę ;) jak napisze to przerzucę się na coś lepszego :-)

0

Zapewniam cię ze nawet dev umożliwia korzystanie z aktualnych bibliotek bez .h na końcu.
Oczywiście jeżeli zaimportujesz odpowiedni namespace.
Zapewniam że jeśli zamienisz

#include <iostream.h>

na

#include <iostream>
using namespace std;

to będzie działać.

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