Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

visual C++ - dostosowanie danych

FATIL 31 May 2011 22:33 1547 12
  • #1
    FATIL
    Level 9  
    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();
  • #3
    wiesniak
    Level 31  
    Zamiast ToInt32 użyj ToDouble.
  • #4
    FATIL
    Level 9  
    Nie pomaga ToDouble.., a Drawline teoretycznie mabyc 32..
  • #5
    wiesniak
    Level 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...).
  • #6
    FATIL
    Level 9  
    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..
  • Helpful post
    #7
    wiesniak
    Level 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
    Code: csharp
    Log in, to see the code

    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++.
  • #8
    FATIL
    Level 9  
    Code:
    Error   1   error C2228: left of '.Replace' must have class/struct/union   
    


    jak to "zdefiniować"?
  • Helpful post
    #9
    wiesniak
    Level 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++.
  • #10
    FATIL
    Level 9  
    a można w c++

    zrobić coś takiego
    Quote:
    ->Split(',' or '.')
  • #11
    wiesniak
    Level 31  
    Można - trzeba podać tablicę charów. Dokładny opis znajdziesz na MSDN.
  • #12
    FATIL
    Level 9  
    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ć..