ເນື້ອໃນ

# ບໍລິການ ScriptForge.TextStream

ບໍລິການ TextStream ໃຊ້ເພື່ອອ່ານ ແລະ ຂຽນໄຟລ໌ຕາມລຳດັບ ເຊິ່ງເປີດ ຫຼື ສ້າງໂດຍໃຊ້ບໍລິການ ScriptForge.FileSystem.

ເມທອດ OpenTextFile ແລະ CreateTextFile ຈາກບໍລິການ FileSystem ຈະສົ່ງຄືນອິນສະແຕນຊ໌ຂອງບໍລິການ TextStream.

ຜູ້ໃຊ້ອາດຈະກຳນົດຕົວຂັ້ນແຖວ (line delimiters) ໄດ້. ໃນການອ່ານຂໍ້ມູນ (input) ແມ່ນຮອງຮັບ CR, LF ຫຼື CR+LF. ໃນການຂຽນຂໍ້ມູນ (output), ຕົວຂັ້ນແຖວເລີ່ມຕົ້ນແມ່ນຕົວທີ່ລະບົບປະຕິບັດການນຳໃຊ້.

ຕົວຂັ້ນແຖວຂອງລະບົບປະຕິບັດການທີ່ມາໂຄຣກຳລັງເຮັດວຽກຢູ່ ສາມາດເຂົ້າເຖິງໄດ້ໂດຍໃຊ້ຄຸນສົມບັດ SF_String.sfNEWLINE.

ທຸກໆການປະຕິບັດການທີ່ຈຳເປັນໃນການອ່ານ ຫຼື ຂຽນໄຟລ໌ (ເປີດ, ອ່ານ/ຂຽນ ແລະ ປິດ) ແມ່ນສົມມຸດວ່າມັນເກີດຂຶ້ນພາຍໃນການເຮັດວຽກຂອງມາໂຄຣດຽວກັນ.

## ການເອີ້ນໃຊ້ບໍລິການ

ຕົວຢ່າງລຸ່ມນີ້ໃນ Basic ແລະ Python ແມ່ນການໃຊ້ເມທອດ OpenTextFile ເພື່ອສ້າງອິນສະແຕນຊ໌ຂອງບໍລິການ TextStream.

##### ໃນ Basic

        GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
        Dim FSO As Variant
        FSO = CreateScriptService("FileSystem")
        Set myFile = FSO.OpenTextFile("C:\Temp\ThisFile.txt", FSO.ForReading)

ໄຟລ໌ຈະຕ້ອງຖືກປິດດ້ວຍເມທອດ CloseFile ຫຼັງຈາກການອ່ານ ຫຼື ຂຽນທັງໝົດສຳເລັດແລ້ວ:

        myFile.CloseFile()

ນອກຈາກນັ້ນ, ຊັບພະຍາກອນທີ່ໃຊ້ໂດຍອິນສະແຕນຊ໌ TextStream ສາມາດຖືກປ່ອຍອອກໄດ້ໂດຍໃຊ້ເມທອດ Dispose:

        Set myFile = myFile.Dispose()

ເມທອດຕ່າງໆໃນບໍລິການ TextStream ສ່ວນໃຫຍ່ແມ່ນອີງຕາມອິນເຕີເຟສ UNO XTextInputStream ແລະ XTextOutputStream.

##### ໃນ Python

        from scriptforge import CreateScriptService
        fs = CreateScriptService("FileSystem")
        myFile = fs.OpenTextFile(r"C:\Temp\ThisFile.txt", fs.ForReading)
        # ...
        myFile.CloseFile()
        myFile = myFile.Dispose()

## ຄຸນສົມບັດ

ຊື່ | ອ່ານຢ່າງດຽວ | ປະເພດ | ຄຳອະທິບາຍ
--- | --- | --- | ---
AtEndOfStream | ແມ່ນ | Boolean | ໃຊ້ໃນໂໝດການອ່ານ. ຄ່າ True ບົ່ງບອກວ່າໄດ້ອ່ານເຖິງທ້າຍໄຟລ໌ແລ້ວ. ຄວນກວດສອບຄຸນສົມບັດນີ້ກ່ອນທີ່ຈະເອີ້ນໃຊ້ເມທອດ ReadLine.
Encoding | ແມ່ນ | String | ຊຸດຕົວອັກສອນທີ່ຈະໃຊ້. ການເຂົ້າລະຫັດເລີ່ມຕົ້ນແມ່ນ "UTF-8".
FileName | ແມ່ນ | String | ສົ່ງຄືນຊື່ຂອງໄຟລ໌ປັດຈຸບັນໃນຮູບແບບ URL ຫຼື ໃນຮູບແບບຂອງລະບົບປະຕິບັດການດັ້ງເດີມ, ຂຶ້ນຢູ່ກັບຄ່າປັດຈຸບັນຂອງຄຸນສົມບັດ FileNaming ຂອງບໍລິການ FileSystem.
IOMode | ແມ່ນ | String | ບົ່ງບອກໂໝດ input/output. ຄ່າທີ່ເປັນໄປໄດ້ແມ່ນ "READ", "WRITE" ຫຼື "APPEND".
Line | ແມ່ນ | Long | ສົ່ງຄືນຈຳນວນແຖວທີ່ໄດ້ອ່ານ ຫຼື ຂຽນໄປແລ້ວຈົນເຖິງຕອນນີ້.
NewLine | ບໍ່ແມ່ນ | String | ຕັ້ງຄ່າ ຫຼື ສົ່ງຄືນຕົວຂັ້ນປັດຈຸບັນທີ່ຈະຖືກແຊກລະຫວ່າງສອງແຖວທີ່ຂຽນຕິດຕໍ່ກັນ. ຄ່າເລີ່ມຕົ້ນແມ່ນຕົວຂັ້ນແຖວດັ້ງເດີມໃນລະບົບປະຕິບັດການປັດຈຸບັນ.

ເພື່ອຮຽນຮູ້ເພີ່ມເຕີມກ່ຽວກັບຊື່ຂອງຊຸດຕົວອັກສອນ, ໃຫ້ເຂົ້າເບິ່ງໜ້າ IANA's Character Set. ກະລຸນາຮັບຊາບວ່າ LibreOffice ບໍ່ໄດ້ຮອງຮັບທຸກຊຸດຕົວອັກສອນທີ່ມີຢູ່.

ລາຍການເມທອດໃນບໍລິການ TextStream
CloseFile ReadAll | ReadLine SkipLine | WriteBlankLines WriteLine

## CloseFile

ປິດສະຕຣີມ input ຫຼື output ປັດຈຸບັນ ແລະ ລ້າງບັບເຟີ (buffer) ຂາອອກຖ້າກ່ຽວຂ້ອງ. ສົ່ງຄືນ True ຖ້າປິດໄຟລ໌ສຳເລັດ.

### ໄວຍາກອນ:

myFile.CloseFile(): bool

## ReadAll

ສົ່ງຄືນແຖວທີ່ເຫຼືອທັງໝົດໃນສະຕຣີມຂໍ້ຄວາມເປັນສະຕຣິງດ່ຽວ. ການຂຶ້ນແຖວໃໝ່ຈະບໍ່ຖືກເອົາອອກ.

ສະຕຣິງຜົນລັບສາມາດຖືກແຍກເປັນແຖວໄດ້ໂດຍການໃຊ້ຟັງຊັນ Split ຂອງ Basic ຖ້າຮູ້ຕົວຂັ້ນແຖວ, ຫຼື ໃຊ້ເມທອດ SF_String.SplitLines.

ສຳລັບໄຟລ໌ຂະໜາດໃຫຍ່, ການໃຊ້ເມທອດ ReadAll ຈະສິ້ນເປືອງຊັບພະຍາກອນໜ່ວຍຄວາມຈຳ. ໃນກໍລະນີນັ້ນ ແນະນຳໃຫ້ອ່ານໄຟລ໌ເທື່ອລະແຖວໂດຍໃຊ້ເມທອດ ReadLine.

### ໄວຍາກອນ:

myFile.ReadAll(): str

### ຕົວຢ່າງ:

ພິຈາລະນາໄຟລ໌ຂໍ້ຄວາມ "Students.txt" ທີ່ມີເນື້ອໃນດັ່ງຕໍ່ໄປນີ້ (ມີຊື່ໃນແຕ່ລະແຖວ):

        Herbie Peggy
        Hardy Jarrett
        Edith Lorelle
        Roderick Rosamund
        Placid Everette

ຕົວຢ່າງລຸ່ມນີ້ໃນ Basic ແລະ Python ແມ່ນການໃຊ້ເມທອດ ReadAll ແລະ SplitLines ເພື່ອອ່ານເນື້ອໃນຂອງໄຟລ໌ເຂົ້າໃນອາເຣຂອງສະຕຣິງ:

##### ໃນ Basic

        'ໂຫຼດບໍລິການ FileSystem
        Dim FSO : FSO = CreateScriptService("FileSystem")
        'ເປີດໄຟລ໌ຂໍ້ຄວາມທີ່ມີຊື່ທີ່ຈະອ່ານ
        Dim inputFile as Object
        Set inputFile = FSO.OpenTextFile("/home/user/Documents/Students.txt")
        'ອ່ານເນື້ອໃນທັງໝົດໃນໄຟລ໌ຂາເຂົ້າເປັນສະຕຣິງດ່ຽວ
        Dim allData as String
        allData = inputFile.ReadAll()
        'ແຍກສະຕຣິງອອກເປັນອາເຣ
        Dim arrNames as Variant
        arrNames = SF_String.SplitLines(allData)
        ' (...)
        inputFile.CloseFile()

##### ໃນ Python

        fs = CreateScriptService("FileSystem")
        inputFile = fs.OpenTextFile("/home/user/Documents/Students.txt")
        allData = inputFile.ReadAll()
        arrNames = allData.split(inputFile.NewLine)
        # ...
        inputFile.CloseFile()

## ReadLine

ສົ່ງຄືນແຖວຖັດໄປໃນສະຕຣີມຂໍ້ຄວາມເປັນສະຕຣິງ. ການຂຶ້ນແຖວໃໝ່ຈະຖືກເອົາອອກຈາກສະຕຣິງທີ່ສົ່ງຄືນມາ.

ຄວນກວດສອບດ້ວຍ AtEndOfStream ກ່ອນທີ່ຈະໃຊ້ເມທອດ ReadLine ຄືກັບໃນຕົວຢ່າງລຸ່ມນີ້.

ຈະເກີດຂໍ້ຜິດພາດຖ້າອ່ານຮອດ AtEndOfStream ແລ້ວໃນລະຫວ່າງການເອີ້ນໃຊ້ເມທອດ ReadLine ຫຼື SkipLine ກ່ອນໜ້ານີ້.

### ໄວຍາກອນ:

myFile.ReadLine(): str

### ຕົວຢ່າງ:

##### ໃນ Basic

        Dim sLine As String
        Do While Not myFile.AtEndOfStream
            sLine = myFile.ReadLine()
            ' (...)
        Loop

##### ໃນ Python

        while not myFile.AtEndOfStream:
            sLine = myFile.ReadLine()
            # ...

## SkipLine

ຂ້າມແຖວຖັດໄປໃນສະຕຣີມຂາເຂົ້າເມື່ອອ່ານໄຟລ໌ TextStream.

ເມທອດນີ້ອາດຈະເຮັດໃຫ້ AtEndOfStream ຖືກຕັ້ງເປັນ True.

### ໄວຍາກອນ:

myFile.SkipLine()

## WriteBlankLines

ຂຽນແຖວວ່າງຕາມຈຳນວນທີ່ລະບຸລົງໃນສະຕຣີມຂາອອກ.

### ໄວຍາກອນ:

myFile.WriteBlankLines(lines: int)

### ພາຣາມິເຕີ:

lines: ຈຳນວນແຖວວ່າງທີ່ຈະຂຽນລົງໃນໄຟລ໌.

## WriteLine

ຂຽນສະຕຣິງທີ່ໃຫ້ມາລົງໃນສະຕຣີມຂາອອກເປັນແຖວດ່ຽວ.

ຕົວອັກສອນທີ່ກຳນົດໃນຄຸນສົມບັດ NewLine ຈະຖືກໃຊ້ເປັນຕົວຂັ້ນແຖວ.

### ໄວຍາກອນ:

myFile.WriteLine(line: str)

### ພາຣາມິເຕີ:

line: ແຖວທີ່ຈະຂຽນ, ອາດຈະວ່າງເປົ່າກໍໄດ້.

### ຕົວຢ່າງ:

ຕົວຢ່າງລຸ່ມນີ້ໃນ Basic ແລະ Python ແມ່ນການສ້າງໄຟລ໌ຂໍ້ຄວາມໃນຮູບແບບ CSV ເຊິ່ງແຕ່ລະແຖວຈະປະກອບດ້ວຍຄ່າ ແລະ ຄ່າກຳລັງສອງຂອງມັນ ຈົນກວ່າຈະຮອດ lastValue.

##### ໃນ Basic

        Sub SquaredValuesFile(lastValue as Integer)
            'ສ້າງອິນສະແຕນຊ໌ຂອງບໍລິການ FileSystem
            Dim FSO as Variant : FSO = CreateScriptService("FileSystem")
            'ສ້າງໄຟລ໌ຂໍ້ຄວາມ
            Dim myFile as Variant : myFile = FSO.CreateTextFile("/home/user/Documents/squares.csv")
            'ຂຽນຄ່າ (Value) ແລະ ຄ່າກຳລັງສອງ (Value squared), ໂດຍຂັ້ນດ້ວຍ ";"
            Dim value as Integer
            myFile.WriteLine("Value;Value Squared")
            For value = 1 To lastValue
                myFile.WriteLine(value & ";" & value ^ 2)
            Next value
            'ປິດໄຟລ໌ ແລະ ປ່ອຍຊັບພະຍາກອນ
            myFile.CloseFile()
            Set myFile = myFile.Dispose()
        End Sub

##### ໃນ Python

        def squared_values_file(lastValue):
            fs = CreateScriptService("FileSystem")
            myFile = fs.CreateTextFile("/home/user/Documents/squares.csv")
            myFile.WriteLine("Value;Value Squared")
            for value in range(1, lastValue + 1):
                myFile.WriteLine("{};{}".format(value, value ** 2))
            myFile.CloseFile()
            myFile = myFile.Dispose()

ຣູທີນ ຫຼື ຕົວລະບຸ Basic ຂອງ ScriptForge ທັງໝົດທີ່ຂຶ້ນຕົ້ນດ້ວຍເຄື່ອງໝາຍຂີດກ້ອງ "_" ແມ່ນສະຫງວນໄວ້ສຳລັບໃຊ້ພາຍໃນ. ພວກມັນບໍ່ໄດ້ມີໄວ້ໃຫ້ໃຊ້ໃນມາໂຄຣ Basic ຫຼື ສະຄຣິບ Python.

ຫົວຂໍ້ທີ່ກ່ຽວຂ້ອງ

ບໍລິການ ScriptForge.FileSystem

ຟັງຊັນ Input [VBA]

ຄຳສັ່ງ Open

ກະລຸນາສະໜັບສະໜູນພວກເຮົາ!