Visual Basic 2005 pomijanie warunku z porównaniem wartości String

1

Witam ponownie,
otóż mam dziwny problem. Na początek kod:

 Public Class Form1
    Const CrLf As String = (Chr(13)) & (Chr(10)) 'koniec lini tekstu
    Const strStart As String = ";Start"
    Const strStop As String = ";Stop"
    Private Sub btnPoczatek_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPoczatek.Click
        Try
            txtKod.Paste(strStart) 'Wklejenie znacznika start
        Catch ex As Exception

        End Try
    End Sub

    Private Sub btnKoniec_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnKoniec.Click
        Try
            txtKod.Paste(strStop) 'Wklejenie znacznika stop
        Catch ex As Exception

        End Try
    End Sub

    Private Sub btnZmienX_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnZmienX.Click
       

    End Sub

    Private Sub btnZmienY_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnZmienY.Click
        Dim dubWartoscY As Double
        Dim dubWartoscYzmieniona As Double
        Dim ciag As String
        Dim strKod As String
        Dim temp As Integer
        Dim strWartosc As String
        Dim strKonwert As String
        Dim tekst As String
        Dim wiersz() As String
        Dim a, n As Integer
        Dim c As String

        tekst = txtKod.Text     'Zawartość pola text do zmiennej tekst
        wiersz = tekst.Split(CrLf)   'dzielenie zawartosci zmiennej tekst na wiersze na podstawie znaków końca lini (Enter)
        n = wiersz.Length  'obliczanie ilości wierszy

        a = 0   'zmienna pomocnicza

        Do Until a = n
            c = wiersz(a)
            MessageBox.Show(c)
            If c = strStart Then 'TODO warunek porównujący zawartość wiersza do znacznika start
                a = a + 1  'Przejscie do nastepnej lini (chyba)
                Do Until c = strStop  'Warunek sprawdzający czy w wierszu jest znacznik stop
                    strKod = wiersz(a) 'Pobieranie zawartosci wiersza do zmiennej
                    temp = InStr(strKod, "R") - InStr(strKod, "Y") - 1 'obliczanie gdzie jest wartosc liczbowa dla Y
                    ciag = strKod.Substring(InStr(strKod, "Y"), temp) 'wycinanie wartości zawartych miedzy Y a R
                    ciag = ciag.Replace(Chr(32), "") 'usuwanie spacji
                    strWartosc = txtWartosc.Text  'Pobieranie zawartości pola wartosc
                    strWartosc = strWartosc.Replace(".", ",")  'zamiana kropek na przecinki
                    strWartosc = Val(Replace(strWartosc, ",", ".")) 'pobieranie wartosci liczbowych z pola wartosc
                    strKod = strKod.Replace(".", ",") 'zmiana kropek na przecinki
                    dubWartoscY = Val(Replace(ciag, ",", ".")) 'pobieranie wartosci liczbowych dla Y

                    Try
                        dubWartoscYzmieniona = dubWartoscY + strWartosc  'działanie
                    Catch ex As Exception

                    End Try
                    strKod = strKod.Replace(strKod.Substring(InStr(strKod, "Y"), temp), "") 'czyszczenie pola miedzy Y a R
                    strKonwert = dubWartoscYzmieniona.ToString() 'Koniecznosc zmienienia wartosci liczbowych na String
                    strKod = strKod.Insert(InStr(strKod, "Y"), strKonwert) 'Wklejanie wyniku za literą y

                    tekst = tekst.Replace(wiersz(a), strKod) 'Zamiana zawartosci wiersza na ten z zmieniona wartością
                    txtKod.Text = tekst 'Aktualizacja pola tekstowego
                    MessageBox.Show(tekst)
                    a = a + 1
                Loop

            ElseIf c = strStop Then   'TODO sprawdzanie czy w aktualnym wierszu nie ma znacznika Stop

                Exit Do  'wymuszenie wyjścia z pętli

            Else
                a = a + 1 'Przejście do następnego wiersza
            End If


        Loop

    End Sub

End Class

Chodzi mi dokładnie o ostatnią część.
W pętli mam warunek który sprawdza mi czy zawartość wiersza to znacznik start czyli ";Start". Problem w tym, że po prostu pomija mi ten warunek jak gdyby nigdy nic chociaż wiem, że zawartość wiersza jest dobra jak i że pętla działa (messagebox + debugowanie krok po kroku i wszystko jasne).
Moje pytanie brzmi, czy ja coś poknociłem w pisaniu warunku czy po prostu jest jakaś zasada i to nie zadziała tak jak ja myślę?
Przykładowy G cod który to ma modyfikować:

 
G1  X30.000   Y40.000             R.44.000
;Start
G1  X30.000   Y41.000             R.44.000
;Stop
G1  X30.000   Y42.000             R.44.000

Dodam, że bez warunku czyli po prostu zliczanie wierszy i modyfikacja każdego to program działa bez problemu (dodam jeszcze, żeby mi formatowało wyniki ale to na końcu).
Ktoś ma jakiś pomysł?
Z góry dzięki i pozdrawiam

0

a porównywanie nie robi się poprzez "'==" ?

0

Próbowałem, ale to nie C++ ;) W najprostszym warunku który zrobiłem by sprawdzić czy w ogóle dobrze warunek piszę dałem "=" i działało. W kursach wszelakich też się przez jeden znak równości pisze :) I jestem kurde w kropce bo próbuję to od wczoraj zrobić.

1

Rozbierzmy twoje warunki na części pierwsze:

Do Until a = n
            If c = strStart Then 
                'TU WCHODZIMY BO START
                a = a + 1
                Do Until c = strStop  
                    'TU WCHODZIMY I JESTEŚMY TAK DŁUGO, AŻ STOP
                    a = a + 1
                Loop
 
            ElseIf c = strStop Then    
                'TU NIE WCHODZIMY, BO JEST ELSEIF - WESZŁO JUŻ W IF, WIĘC OD RAZU WYSKAKUJEMY CAŁEGO WARUNKU I WPADAMY Z POWROTEM W PĘTLĘ
                Exit Do   
            Else
                a = a + 1 
            End If
Loop

Prawidłowo będzie:

Do Until a = n
            If c = strStart Then 
            
                a = a + 1
                Do Until c = strStop  
            
                    a = a + 1
                Loop
            End If
 
            If c = strStop Then    
                Exit Do   
            End If
            a = a + 1 
Loop
0

Czyli Elseif mogło powodować problem? Ok dzięki spróbuję.

Edit:
Niestety nic to nie dało. Po prostu dochodzi do do miejsca sprawdzania warunku i zamiast wejść głębiej to przeskakuje na Endif od razu. To samo przy stopie. Nie mam pojęcia czemu to nie chce działać bo warunek wydaje mi się, że jest ok.

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