ບໍລິການ 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.


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

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