Разделение (Строка) Навигация - «Перейти к следующей подстроке» - PullRequest
0 голосов
/ 22 февраля 2012

Я ни в коем случае не опытный программист. Это задание, которое у меня есть, весьма вероятно, одноразовое, поэтому не стесняйтесь давать мне ответы, вместо того, чтобы указывать мне правильное направление: P

Я искал столько времени, сколько смогу вынести, и просто не могу найти то, что мне нужно.

Мне просто нужно иметь возможность перейти к следующей подстроке строки. В этом случае «перейти к следующей подстроке» приравнивается к «перейти к следующей строке». Мне просто нужно сказать, что одна команда, и я буду в пути, но я не могу найти никаких следов этого.

Вот фрагмент кода с установленной магической командой:

Dim count As Integer
Dim line As String
Dim lines As String() = My.Computer.FileSystem.ReadAllText("C:\test.txt").Split(New Char() {vbCrLf})

For Each line In Lines
    If line.Contains("#")
        count = 0
        **GO TO NEXT LINE**
        Do Until line.Contains("#")
            count = count + 1
            **GO TO NEXT LINE**
        Loop
        Console.WriteLine(line & ", " & count)
    End If
Next

Если я что-то упустил, я смогу использовать текст, отформатированный так:

#VERSE1
Lyrics lyrics
Lyrics lyrics
#CHORUS1
Lyrics lyrics
Lyrics lyrics
Lyrics lyrics
Lyrics lyrics
#VERSE2
Lyrics lyrics
Lyrics lyrics
Lyrics lyrics
#CHORUS2
Lyrics lyrics
Lyrics lyrics
Lyrics lyrics
Lyrics lyrics
Lyrics lyrics
#END

И получите результат:

#VERSE1, 2
#CHORUS1, 4
#VERSE2, 3
#CHORUS2, 5
#END, 0

Я прошу прощения, если я дико не в порядке. Я просто собираю кусочки, которые я нашел в различных уроках.

Мне удалось получить все остальные функции, которые мне нужны для работы только с Google, но это последнее задание застряло.

Спасибо!

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Я думаю, тебе нужно сделать что-то подобное.То, что вы пытаетесь сделать, это переместить ваш индекс в двух направлениях.Вам нужно перебирать подстроки до тех пор, пока вы не увидите # проблему, заключающуюся в том, что, как только вы попадете туда, ваш оператор For переместит его за эту запись.Я создал пример с использованием вашего файла, который, кажется, работает с использованием базового оператора For.Посмотрите, работает ли он для вас.

Sub Main()
    Dim count As Integer
    Dim x As Integer
    Dim line As String
    Dim lines As String() = My.Computer.FileSystem.ReadAllText("C:\test.txt").Split(New Char() {vbCrLf})

    For x = 0 To lines.Length - 1
        If lines(x).Contains("#") Then
            line = lines(x)
            count = 0
            x += 1
            If x < lines.Length - 1 Then
                Do Until lines(x).Contains("#")
                    count += 1                 'Increment Counter
                    x += 1                     'Point to next Line  
                Loop
            End If
            Console.WriteLine(line & ", " & count)
            x -= 1                             ' Set x back to the line before the # so the for statement will find correct line.
        End If
    Next

    Console.ReadLine()
End Sub

Вывод выглядит так:

 #VERSE1 , 2

 #CHORUS1 , 4

 #VERSE2 , 3

 #CHORUS2 , 5

 #END , 0
0 голосов
/ 22 февраля 2012
    Dim count As Integer = 0
    Dim line As String = String.Empty
    Dim strSongSegment As String = String.Empty
    Dim lines As String() = My.Computer.FileSystem.ReadAllText("C:\test.txt").Split(New Char() {vbCrLf})

    For Each line In lines

        'Is this a new segment of the song?
        If line.Contains("#") Then

            'Make sure its not the first segment.
            '(Note that .Length is a more modern approach.)
            If Len(strSongSegment) > 0 Then

                Console.WriteLine(strSongSegment & ", " & count.ToString())

            End If

            'Keep track of this until we have the finaly tally for this segment.
            strSongSegment = line

            'Look down a couple lines of code to see why this is -1.
            count = -1

        End If

        'Increment the cursor.
        count = count + 1

    Next

    'Finally display the total for the last segment.
    Console.WriteLine(line & ", " & count.ToString())
...