wczytywanie zmiennoprzecinkowych , fstream

0

witam!
Chciałabym was prosic o pomoc przy wczytywaniu danych za pomocą biblioteki fstream. Mój plik zawiera wartości wraz z ich opisami. Chcę,żeby program przy wczytywaniu pomijał te opisy. Próbowałam coś zrobić za pomocą ignore i seekg, ale skończyło się niepowodzeniem. Nie mogę wczytywać wszystkiego, ponieważ plik zawiera kilka tysięcy takich słów i to spowolni mi symulację. Proszę o wyrozumiałość, moje doświadczenie z c++ to co najwyżej "początkujący".
Fragment pliku:

.t=0[s]
.cząstka:0 .Fx=7.2973e-08 .Fy=8.17374e-08 .x= -9.74026e-05 .y= -8.92987e-05
.cząstka:1 .Fx=-4.33224e-08 .Fy=-5.00582e-08 .x= -5.66234e-05 .y= -9.33506e-05
.cząstka:2 .Fx=8.59015e-08 .Fy=1.54504e-07 .x= -3.65714e-05 .y= -8.72727e-05
.cząstka:3 .Fx=6.52105e-09 .Fy=-1.92048e-08 .x= -5.45455e-06 .y= -9.45974e-05
Zaznaczone wartości to te, które chcę wczytać. Z góry dzięki za zainteresowanie tematem.

0

Nie mogę wczytywać wszystkiego, ponieważ plik zawiera kilka tysięcy takich słów i to spowolni mi symulację.

Ale tutaj to najlepsze wyjście. Kilka tysięcy to wcale nie jest dużo... Możesz jeszcze sobie ten plik przerobić na binarny i zostawić w nim tylko te wartości, które potrzebujesz.

0

źle się wyraziłam, za co przepraszam - tego będzie ponad 30 tys*ilość przedziałów czasowych. Czyli ostatecznie będzie tego min.7 000 000 danych. Wolałabym uniknąć wczytywania wszystkiego po kolei:/

0

Wczytać będziesz musiał chyba wszystko tak czy siak (plik to strumień a nie zestaw "paczuszek" z danymi, ale możesz potratować część zmiennych jako "śmieci" czyli nic z nimi po wczytaniu nie zrobić. Podejrzewam że to było by nawet szybsze niż szukanie klastrów z potrzebnymi fragmentami pliku. Przy czytaniu "do spacji" powinien pomóc string . O ile między x a liczbą a także y a liczbą faktycznie jest spacja,to robisz zmienną typu string o nazwie np smiec i wczytujesz smiec, smiec, smiec , smiec , x smiec, y. Jak spacja "opcjonalna" to zamiast 2 ostatnich smieci wczytujesz 2x typ char (jeden dla x/y i drugi dla :)

0
  1. czy możesz przekonwertować plik na inny format przed uruchomieniem procesu? (np. tylko z interesującymi kolumnami)

  2. jak często czytasz plik w trakcie symulacji?

0
vpiotr napisał(a):
  1. czy możesz przekonwertować plik na inny format przed uruchomieniem procesu? (np. tylko z interesującymi kolumnami)

Nie jestem pewna, ale konwersja chyba nie ma sensu, bo plik pochodzi z innego projektu, który pracuje równolegle z w/w. Tzn. dane będą wczytywane na bieżąco w proj. 1 do pliku i od razu odczytywane przez proj. 2 (graficzny).

0
istream &ueq(istream &s) { int ch; while((s)&&(s.get()!='=')) {} }

double x,y;
plik>>ueq;
while(plik>>ueq>>ueq>>ueq>>x>>ueq>>y)
  {
   cout<<"x="<<x<<"; y="<<y<<";"<<endl;
  }
0

Dzięki wszystkim za zainteresowanie. Pozostaje mi zostawić projekt w dotychczasowym stanie.

1

@adamantan, przecież podałem ci działające rozwiązanie.

0
_13th_Dragon napisał(a):

@adamantan, przecież podałem ci działające rozwiązanie.

Tak, jest w porządku, dzięki. Ale w międzyczasie nie siedzialam bezczynnie i sama też pracowałam nad swoim problemem. Kod wydaje mi się być bardzo podobny do twojego, więc go zostawiam w spokoju.

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