Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

In this Discussion

Loading a text file

edited April 24 in General Posts: 2,118

All - anyone opened and read a text file recently with the new asset system. Been playing around with this but can’t get it right.. general approach I am looking for is to open a file and read it into an array then I can interpret each line separately, with Lua seems to be:


local file = io.open("your-file-name", "r"); local data = file:read("*a") local file = io.open("file-name", "r"); local arr = {} for line in file:lines() do table.insert (arr, line); end

Anyone tried this in Codea? Every time I get into io.open etc I struggle to get the syntax correctly. The other thing is that Codea treats. File.txt as file_txt in the asset system.

Comments

  • dave1707dave1707 Mod
    Posts: 9,109

    @Bri_G Here’s some code to do a hex dump. Change the file name in readText().

    -- hex dump
    
    viewer.mode=FULLSCREEN
    
    function setup()
        dy=0
        font("Courier")
        textMode(CORNER) 
        fill(255)
        tab={}
        str=readText(asset.documents.Dropbox.text1)
    end
    
    function draw()
        background(0)
        for z=1,#str,16 do
            text(string.format("%5d:",z-1),30,HEIGHT-25*(z//16+1)+dy)
            for s=1,16 do
                v=str:byte(z+s-1)
                if v~=nil then
                    ch=""
                    if v>31 and v<128 then
                        ch=string.char(v)
                    end
                    if s<9 then
                        a=string.format("%02x ",v)
                        text(a,25*s+100,HEIGHT-25*(z//16+1)+dy )                    
                        text(ch,12*s+550,HEIGHT-25*(z//16+1)+dy )
                        if s==8 then
                            text("-",25*s+123,HEIGHT-25*(z//16+1)+dy )
                        end
                    else
                        a=string.format("%02x ",v)
                        text(a,25*s+110,HEIGHT-25*(z//16+1)+dy )                
                        text(ch,12*s+550,HEIGHT-25*(z//16+1)+dy )
                    end
                end
            end      
        end
    end
    
    function touched(t)
        dy=dy+t.deltaY
        if dy<0 then
            dy=0
        end
    end
    
  • dave1707dave1707 Mod
    Posts: 9,109

    @Bri_G Or maybe this is what you’re after.

    function setup()
        tab={}
        file=os.getenv("HOME").."/Documents/Dropbox.assets/text1.txt"
        readBinary()
        print(table.concat(tab," "))
        print("done")
    end
    
    function draw()
        background(40,40,50)
    end
    
    function readBinary()
        local bFd = io.open(file,"rb")
        local bData = ""
        if bFd then
            while true do
                local data = bFd:read(512) -- Read 512 bytes at a time
                if not data then
                    break
                end
                bData = bData..data
            end
            bFd:close()
        end
        for i=1,string.len(bData) do
            x=bData:byte(i)
            if x>32 and x<128 then
                table.insert(tab,string.format("%02x-%s ",x,string.char(x)))
                else
                table.insert(tab,string.format("%02x-- ",x))
            end
        end
    end
    
  • Posts: 2,118

    @dave1707 - wow, pretty impressive but not quite what I am seeking. But, the addressing in setup() was interesting. I was looking at io.lines and that may be the key I needed. Also, I have managed to read the file line by line by using readText(). Now looking at deciphering the text in each line trying to re-write it in another format. Thanks for that.

    Will post code later when I manage it.

Sign In or Register to comment.