qbasic中的新行char?

时间:2013-06-09 11:21:28

标签: newline qbasic

我知道我的问题非常基本,但我对qbasic并不熟悉,所以请原谅。我的问题是:

如何在qbasic中检测字符串变量中的新行char?在java中我们必须找到'\n' char,但qbasic中有什么?真的我想读取一个文本文件并检测它的行。谢谢你。

2 个答案:

答案 0 :(得分: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%,它将在String的开头处开始搜索。您要查找的字符是CHR$(10)。 QBasic使用这个CHR-Syntax而不是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

答案 1 :(得分:0)

使用二进制文件i / o计算文件中行数的示例程序。

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