Вы можете использовать функцию INSTR
:
'Sample text
Dim myText As String
myText = "Hello World!" + CHR$(10) + "This is a new line."
'Find new line character \n (line feed LF)
Dim newLinePosition As Integer
newLinePosition = Instr(myText, CHR$(10))
If (newLinePosition >= 1) Then
Print "Yes, a LF character was found at char no# "; Ltrim$(Str$(newLinePosition))
Else
Print "No LF character was found. :("
End If
Sleep: End
Синтаксис INSTR выглядит следующим образом:
pos% = INSTR ([startOffset%,] haystack$, needle$)
Если startOffset%
опущен, он начинает свой поиск на начало строки. Персонаж, которого вы ищете, - CHR$(10)
. QBasic использует этот CHR-синтаксис вместо маскирование известно из Java и т.д.
Здесь вы можете найти дополнительную помощь на функцию INSTR:
Если вы только хотите считать строки текстового файла, а не искать символы LF в строке, вы можете сделать что-то вроде этого:
Dim lineCount As Integer
lineCount = 0
Dim f As Integer
f = FreeFile ' Automatic detection of next free file handle
Open "MYTEXT.TXT" For Input As #f
Do Until Eof(f)
Line Input #f, temp$
lineCount = lineCount + 1
Loop
Close #f
Print "The text file consists of "; Ltrim$(Str$(lineCount)); " lines."
Sleep: End
Но обратите внимание: метод подсчета LINE INPUT
будет работать только для окончаний строк DOS/Windows (CrLf = Chr $ (13) + Chr $ (10) = \ r \ n). Если текстовый файл имеет UNIX-подобные окончания строки (только для \ n), все строки в файле станут одной строкой, и сценарий подсчета выше всегда будет возвращать «1 строку» в качестве результата.
Альтернативный подход в этом случае открывает файл в режиме BINARY
и проверяет его байтом байтом. Если встречается Chr $ (10), то приращение переменной счетчика строк увеличивается.
DIM lineCount AS INTEGER
lineCount = 0
DIM f AS INTEGER
f = FREEFILE ' Automatic detection of next free file handle
DIM buffer AS STRING
buffer = SPACE$(1)
OPEN "MYTEXT.TXT" FOR BINARY AS #f
DO UNTIL EOF(f)
GET #f, , buffer
IF (buffer = CHR$(10)) THEN
lineCount = lineCount + 1
END IF
LOOP
CLOSE #f
PRINT "The text file consists of "; LTRIM$(STR$(lineCount)); " lines."
SLEEP: END
Использование большого буфера для двоичного ввода-вывода выполняется быстрее, чем чтение по байтам. – eoredson