Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

visual C++ - dostosowanie danych

FATIL 31 Maj 2011 22:33 1421 12
  • #1 31 Maj 2011 22:33
    FATIL
    Poziom 8  

    Mój problem jest następujący - gdy dane są całkowite(bez ".") wszystko działa poprawnie, ale gdy są wpisywane już z "." nie wyświetla mi się linia.... Problem tkwi zapewne w konwertacji do jakiegoś rodzaju pliku tylko nie wiem jak to zrobić..
    Chodzi o to że ta "." jest przecinkiem w danej liczbie ;) wiec "1,1" to 1 i 1, a "0.1,1" to 0.1 i 1
    plik tekstowy:

    Code:
    0.1,21
    
    1,1


    a oto urywek kodu:

    Code:
    for(int i=0; i<numer-1; i++)
    

          {
             WDialog::Linia^ ParaP=gcnew WDialog::Linia();
             temppunkt = numertekstu[i]->Split(',');
             ParaP->pa.X = Convert::ToInt32(temppunkt[0]);
             ParaP->pa.Y = Convert::ToInt32(temppunkt[1]);
             temppunkt = numertekstu[i+1]->Split(',');
             ParaP->pb.X = Convert::ToInt32(temppunkt[0]);
             ParaP->pb.Y = Convert::ToInt32(temppunkt[1]);
             W->ListaP->Add(ParaP);

          }
          
          
          W->Show();

    0 12
  • #3 31 Maj 2011 22:44
    wiesniak
    Poziom 31  

    Zamiast ToInt32 użyj ToDouble.

    0
  • #4 31 Maj 2011 23:07
    FATIL
    Poziom 8  

    Nie pomaga ToDouble.., a Drawline teoretycznie mabyc 32..

    0
  • #5 31 Maj 2011 23:12
    wiesniak
    Poziom 31  

    Być może ma problem z ustawieniami regionalnymi i spodziewa się, że separatorem będzie kropka, a nie przecinek.
    Zobacz przykład http://msdn.microsoft.com/en-us/library/9s9ak971.aspx
    Możesz też spróbować zamienić kropkę na przecinek za pomocą metody Replace wywołanej na rzecz obiektu klasy string (czyli temppunkt[0].Replace...).

    0
  • #6 31 Maj 2011 23:23
    FATIL
    Poziom 8  

    chyba źle się wyraziłem, chodzi o to ze to są współrzędne x i y
    i chce sczytać x1=0.1 i y1=21 oraz x2=1 i y2=1,
    zrobiłem tak (temppunkt[0].Replace(0, 1, ",") ) i nie działa..

    0
  • Pomocny post
    #7 01 Cze 2011 08:15
    wiesniak
    Poziom 31  

    Nie do końca o to mi chodziło.
    ParaP->pb.X = Convert::ToDouble(temppunkt[0].Replace('.',','));
    Sprawdziłem i faktycznie Convert.ToDouble się wykłada jeśli jest kropka, a nie przecinek - rzuca wyjątkiem FormatException.
    Po zrobieniu replace'a tak, jak wyżej, wszystko działa.
    Drugą opcją jest

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    Takie coś też zadziała.

    Oczywiście Twoje właściwości X oraz Y do których przypisujesz wartości powinny być typu double.

    Aha! Moje przykłady są w C# - musisz je sobie "przerobić" na C++.

    0
  • #8 01 Cze 2011 13:02
    FATIL
    Poziom 8  

    Code:
    Error   1   error C2228: left of '.Replace' must have class/struct/union   
    


    jak to "zdefiniować"?

    0
  • Pomocny post
    #9 01 Cze 2011 13:05
    wiesniak
    Poziom 31  

    Zapewne w C++ musisz użyć strzałki zamiast kropki.
    Podałem Ci wcześniej link - sprawdź go, tam jest przykład w C++.

    0
  • #10 01 Cze 2011 13:25
    FATIL
    Poziom 8  

    a można w c++

    zrobić coś takiego

    Cytat:
    ->Split(',' or '.')

    0
  • #11 01 Cze 2011 13:29
    wiesniak
    Poziom 31  

    Można - trzeba podać tablicę charów. Dokładny opis znajdziesz na MSDN.

    0
  • #12 01 Cze 2011 13:54
    FATIL
    Poziom 8  

    Aż tak dobry nie jestem w tym programowaniu.... może jakaś wskazówka ;).


    A ak próbuje korzystać z Replace to wywala ze niejest w Arrayu albo że nie może czegoś tam przekonwertować..

    0