forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Файловые операции (http://forum.boolean.name/showthread.php?t=16252)

Okay 30.01.2012 20:47

Файловые операции
 
Вообщем читал хелп, но не смог найти функцию поиска текста.
Например мне нужно найти в файле "readme.txt" текст "String". Если программа нашла текст, то будет определенно действие, если же нет, то выключаем программу

IgorOK 30.01.2012 21:06

Ответ: Файловые операции
 
Нужно читать каждую строчку файла через ReadLine() и искать текст с помощью instr(). О них смотри в хелпе.

Okay 30.01.2012 21:15

Ответ: Файловые операции
 
А пример можно?
В голове не укладывается как это происходит =)

UPD: Строчек в файле "Неизвестно"

IgorOK 30.01.2012 21:46

Ответ: Файловые операции
 
Код:

Local File=ReadFile("твой файл.txt")

Local what_need$="Джигурда"

While Not Eof(File)
        Local l$=ReadLine(File)
        If Instr(l, what_need$, 1)>0 Then RuntimeError what_need+" was found!"
Wend

Если надо - могу скинуть свой парсер файла.

Okay 30.01.2012 21:51

Ответ: Файловые операции
 
Цитата:

Сообщение от IgorOK (Сообщение 218169)
Код:

Local File=ReadFile("твой файл.txt")

Local what_need$="Джигурда"

While Not Eof(File)
        Local l$=ReadLine(File)
        If Instr(l, what_need$, 1)>0 Then RuntimeError what_need+" was found!"
Wend

Если надо - могу скинуть свой парсер файла.

Надо конечно. =) Буду благодарен.

IgorOK 30.01.2012 21:55

Ответ: Файловые операции
 
Код:

;        PARSER

Global P_LINE_TEXT$
Global P_LINE_LENGTH
Global P_LINE_OFFSET

Function P_ReadLine(FileHandle)
        P_LINE_TEXT$=""
        P_LINE_LENGTH=0
        P_LINE_OFFSET=1
        While Not Eof(FileHandle)
                P_LINE_TEXT=Trim(ReadLine(FileHandle))
                If P_LINE_TEXT<>""
                        If Left(P_LINE_TEXT, 2)<>"//"
                                P_LINE_LENGTH=Len(P_LINE_TEXT)
                                P_LINE_OFFSET=1
                                Return True
                        EndIf
                EndIf
        Wend
        Return False
End Function

Function P_Eol()
        If P_LINE_OFFSET>P_LINE_LENGTH Then Return True
End Function

Function P_nEol()
        Return Not P_Eol()
End Function

Function P_Parse$(ErrorText$="")
        If P_LINE_OFFSET>P_LINE_LENGTH
                If ErrorText=""
                        Return ""
                Else
                        RuntimeError ErrorText
                EndIf
        EndIf

        Local Char=Asc(Mid(P_LINE_TEXT, P_LINE_OFFSET, 1))
       
        While (Char<33 Or Char=127)
                P_LINE_OFFSET=P_LINE_OFFSET+1
                If P_LINE_OFFSET>P_LINE_LENGTH Then Return ""
                Char=Asc(Mid(P_LINE_TEXT, P_LINE_OFFSET, 1))
        Wend
       
        Local Token$
       
        If Char=34
                Local EndOffset=Instr(P_LINE_TEXT, Chr(34), P_LINE_OFFSET+1)
               
                If EndOffset=0
                        EndOffset=P_LINE_LENGTH
                        Return ""
                EndIf
               
                Token=Mid(P_LINE_TEXT, P_LINE_OFFSET+1, EndOffset-P_LINE_OFFSET-1)
                P_LINE_OFFSET=EndOffset+1
                Return Token
               
        Else
                While (Char>32 And Char<>34 And Char<>127)
                        Token=Token+Chr(Char)
                        P_LINE_OFFSET=P_LINE_OFFSET+1
                        If P_LINE_OFFSET>P_LINE_LENGTH Then Exit
                        Char=Asc(Mid(P_LINE_TEXT, P_LINE_OFFSET, 1))
                Wend
                Return Token
        EndIf
End Function

Function P_SetLine(LineText$)
        P_LINE_TEXT$=LineText
        P_LINE_LENGTH=Len(LineText)
        P_LINE_OFFSET=1
End Function

;        TRANSLATOR

Const P_MAX_TOKENS=30

;Standart translator
Global P_STD_TRANSLATOR.P_Translator=P_CreateTranslator("undefined")
P_AddToken(P_STD_TRANSLATOR, "true", 1)
P_AddToken(P_STD_TRANSLATOR, "false", 0)
P_AddToken(P_STD_TRANSLATOR, "yes", 1)
P_AddToken(P_STD_TRANSLATOR, "no", 0)

Type P_Translator
        Field Tokens
        Field Token.P_Token[P_MAX_TOKENS]
       
        Field DefaultValue$
End Type

Type P_Token
        Field InValue$
        Field OutValue$
End Type

Function P_CreateTranslator.P_Translator(DefaultValue$="")
        Local Translator.P_Translator=New P_Translator
        Translator\DefaultValue=DefaultValue
        Return Translator
End Function

Function P_AddToken(Translator.P_Translator, InValue$, OutValue$)
        Local Token.P_Token=New P_Token
        Token\InValue=InValue
        Token\OutValue=OutValue
        Translator\Token[Translator\Tokens]=Token
        Translator\Tokens=Translator\Tokens+1
End Function

Function P_Translate$(Translator.P_Translator, Value$)
        If Translator=Null Then Translator=P_STD_TRANSLATOR
       
        Local LastToken=Translator\Tokens-1
       
        For TokenIndex=0 To LastToken
                Local Token.P_Token=Translator\Token[TokenIndex]
                If Value=Token\InValue Then Return Token\OutValue
        Next
       
        If Translator\DefaultValue<>""
                Return Translator\DefaultValue
        Else
                Return Value
        EndIf
End Function



Вот. Будут вопросы - в личку.

IgorOK 30.01.2012 22:10

Ответ: Файловые операции
 
Коротко о синтаксисе:

1. Разделителем слов является пробел или табуляция. Короче пустое пространство.
2. Чтобы пробелы входили в получаемый при разборе текст - текст нужно писать в кавычках.
3. Поддерживаются однострочные комментарии "//". Но только на всю строку целиком.


Часовой пояс GMT +4, время: 13:44.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot