2013-06-09 2 views
1

Я знаю, что мой вопрос очень простой, но я не familier с QBasic, поэтому извини me.My вопрос есть:Новый символ линии в qbsic?

Как я могу обнаружить новую строку символ в переменной строки в QBasic В Java мы имеем найти '\n' char, но что в qbasic? Действительно, я хочу прочитать текстовый файл и определить его линии. Спасибо.

ответ

2

Вы можете использовать функцию 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 
0

Образец программы для подсчета строк в файле с использованием двоичного файла ввода/вывода.

REM sample program to count lines in a file in QB64. 
' declare filename buffer 
CONST xbuflen = 32767 ' can be changed 
DIM SHARED xbuffer AS STRING * XBUFLEN 
DIM SHARED Lines.Counted AS DOUBLE 
' get filename 
PRINT "Enter filename";: INPUT Filename$ 
' start file count 
IF _FILEEXISTS(Filename$) THEN 
    X = FREEFILE 
    OPEN Filename$ FOR BINARY SHARED AS #X LEN = xbuflen 
    IF LOF(X) > 0 THEN 
     DO UNTIL EOF(X) 
      ' get file buffer 
      GET X, , xbuffer 
      ' count bytes in buffer 
      FOR L = 1 TO xbuflen 
       IF MID$(xbuffer, L, 1) = CHR$(10) THEN 
        Lines.Counted = Lines.Counted + 1# 
       END IF 
      NEXT 
     LOOP 
    END IF 
    CLOSE #X 
END IF 
PRINT "Lines in file"; Lines.Counted 
END 
+0

Использование большого буфера для двоичного ввода-вывода выполняется быстрее, чем чтение по байтам. – eoredson

 Смежные вопросы

  • Нет связанных вопросов^_^