
AlexHolsgrove
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-13-2014
06:10 AM
ReadAsciiFile returns empty string
I am trying to read in an xml file with ReadAsciiFile but the content is always empty. I've added some checking to see if the file exists (I know it does) but again nothing. If I perform the checking on say an image file, it works fine (exists = true / type is PNG etc). When I replace the filename with my XML it just fails.
Why can it not read my XML file (some elements removed to save space)?
fileName = "pkg:/xml/data.xml" - or "pkg:/xml/test.png"
LocalFileBrowser = CreateObject("roFileSystem")
print (LocalFileBrowser.exists(fileName))
contents = ReadAsciiFile(fileName)
print "Type: "+type(contents )
Why can it not read my XML file (some elements removed to save space)?
<DefenderBitmapSet>
<ExtraInfo cellsize="40"/>
<Bitmap name="Background" filespec="pkg:/snake_assets/snake.map_w-dirt.png" />
<Bitmap name="game-over" filespec="pkg:/snake_assets/snake.gameover.png" />
<Bitmap name="title-screen" filespec="pkg:/snake_assets/snake.title.3.png" />
<Bitmap name="snake" filespec="pkg:/snake_assets/snake.body_sprite.png">
<Region name="butt-North" x="00" y="00" w="40" h="40" />
<Region name="butt-East" x="40" y="00" w="40" h="40" />
<Region name="butt-South" x="80" y="00" w="40" h="40" />
<Region name="butt-West" x="120" y="00" w="40" h="40" />
</Bitmap>
<Bitmap name="water_strip" filespec="pkg:/snake_assets/snake.water_sprite.png">
<Region name="a" x="0" y="0" w="40" h="40" t="400" />
</Bitmap>
<Bitmap name="empty" shape="rect" color="0" w="40" h="40" t="680" />
<Animation name="water">
<frame use="water_strip.a" />
</Animation>
<Animation name="tongue-North">
<frame use="snake.tongue-North" />
<frame use="empty" />
</Animation>
<Animation name="tongue-East">
<frame use="snake.tongue-East" />
<frame use="empty" />
</Animation>
<Animation name="tongue-South">
<frame use="snake.tongue-South" />
<frame use="empty" />
</Animation>
<Animation name="tongue-West">
<frame use="snake.tongue-West" />
<frame use="empty" />
</Animation>
</DefenderBitmapSet>
9 REPLIES 9
belltown
Roku Guru
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-13-2014
08:08 AM
Re: ReadAsciiFile returns empty string
Try reading the file into an roByteArray and examine the first few bytes to see if there's anything there other than a non-null ASCII character, i.e. check that each byte is between 1 and 127 inclusive. If you encounter anything else (like 0, or 254 or 255) then it's not an ASCII file. It might, for example, be UTF-8 encoded with a byte order mark, or some other non-ASCII encoding.
EnTerr
Roku Guru
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-13-2014
10:27 AM
Re: ReadAsciiFile returns empty string
"AlexHolsgrove" wrote:
If I perform the checking on say an image file, it works fine (exists = true / type is PNG etc). When I replace the filename with my XML it just fails....
contents = ReadAsciiFile(fileName)
print "Type: "+type(contents )
There is no way the code you show returned type "PNG". It will always be saying String, no matter if read failed (len(contents) = 0) or not. Which makes me think you need to look more closely at what you were doing.
EnTerr
Roku Guru
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-13-2014
10:40 AM
Re: ReadAsciiFile returns empty string
"belltown" wrote:
Try reading the file into an roByteArray and examine the first few bytes to see if there's anything there other than a non-null ASCII character, i.e. check that each byte is between 1 and 127 inclusive. If you encounter anything else (like 0, or 254 or 255) then it's not an ASCII file. It might, for example, be UTF-8 encoded with a byte order mark, or some other non-ASCII encoding.
Checking with roByteArray is good idea!
To clarify though, there is nothing wrong with reading utf-8 file with readAsciiFile(). The naming ASCII is a misnomer, just like with the function ASC(). I checked the behavior and file gets read with some caveats:
- all file contents (text/binary/what-have-you) will be returned, until first \0. CHR(0) is end of the line, think C ASCIIZ char array.
- utf-8 in the file will be decoded to proper Unicodes on fw5 - while on fw3 it will remain as sequence of bytes
- the optional 3-byte BOM at file beginning - if present - is not processed/removed; that is, on fw5 string will start with chr(65279), on fw3 it will be chr(&hEF)+chr(&hBB)+chr(&hBF)
belltown
Roku Guru
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-13-2014
11:49 AM
Re: ReadAsciiFile returns empty string
"EnTerr" wrote:
Checking with roByteArray is good idea!
To clarify though, there is nothing wrong with reading utf-8 file with readAsciiFile(). The naming ASCII is a misnomer, just like with the function ASC(). I checked the behavior and file gets read with some caveats:
- all file contents (text/binary/what-have-you) will be returned, until first \0. CHR(0) is end of the line, think C ASCIIZ char array.
- utf-8 in the file will be decoded to proper Unicodes on fw5 - while on fw3 it will remain as sequence of bytes
- the optional 3-byte BOM at file beginning - if present - is not processed/removed; that is, on fw5 string will start with chr(65279), on fw3 it will be chr(&hEF)+chr(&hBB)+chr(&hBF)
That sounds about right. I know that the different Roku firmwares and components vary in the way they handle UTF-8 encoded files. But definitely a null character will be seen as a string terminator no matter what the encoding. I've never had a problem with ReadAsciiFile reading an Xml file, whether that file was packaged with my channel, or read off a server, except in cases where there were nulls before the end of the file.

AlexHolsgrove
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-18-2014
02:56 AM
Re: ReadAsciiFile returns empty string
"EnTerr" wrote:"AlexHolsgrove" wrote:
If I perform the checking on say an image file, it works fine (exists = true / type is PNG etc). When I replace the filename with my XML it just fails....
contents = ReadAsciiFile(fileName)
print "Type: "+type(contents )
There is no way the code you show returned type "PNG". It will always be saying String, no matter if read failed (len(contents) = 0) or not. Which makes me think you need to look more closely at what you were doing.
The PNG was actually the raw output. This is the actual code I was running - just as a test:
fileName = "pkg:/images/Logo_Overhang_HD.png"
xml = ReadAsciiFile(fileName)
print "Type: "+type(xml)
print xml
print xml.Len()
print "Done"
The length was only 7 but I expected that to fail anyway. It still doesn't work if the fileName pointed to an XML document. I'll try the array next and report back.
Update:
Before even getting as far as reading in the file, I should be able to use roFileSystem to check if the XML file exists. I am certain I have the correct filename / path (the code returns true when I test for any of the image assets)
fileName = "pkg:/xml/sprite.small.map.xml"
LocalFileBrowser = CreateObject("roFileSystem")
print "Exists: "
print LocalFileBrowser.exists(fileName)
Exists:
false
EnTerr
Roku Guru
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-18-2014
11:48 AM
Re: ReadAsciiFile returns empty string
"AlexHolsgrove" wrote:
The PNG was actually the raw output. This is the actual code I was running - just as a test: [...] The length was only 7 but I expected that to fail anyway.
Aha. So the discussion about binary files above applies, there must have been a \0 right after the 8-byte PNG header.
Before even getting as far as reading in the file, I should be able to use roFileSystem to check if the XML file exists. I am certain I have the correct filename / path (the code returns true when I test for any of the image assets) [...]
Right. And seeing the result of your test, i am forced* to conclude the file "sprite.small.map.xml" indeed does not exist inside "pkg:/xml/". Have you checked if it is inside the ZIP bundle that gets uploaded to Roku? It might be that the whole directory is not included at all. Are you using the "eclipse plugin", i can imagine that thing causing it?
(*) for "when all other contingencies fail, whatever remains, however improbable, must be the truth". I checked if by any chance player has issue when file name contains multiple dots "." - but no, it didn't.

AlexHolsgrove
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-22-2014
03:47 AM
Re: ReadAsciiFile returns empty string
That's exactly the problem - Eclipse wasn't including the directories with my XML (and other assets: viewtopic.php?f=34&t=44784)
The one thing that bugs me, is if I go to File->Export and then select the directories that I need - Eclipse doesn't remember them next time. It means that I can use the toolbar button to do a silent deployment (Ctrl+Alt+E). Is there a way to fix this?
The one thing that bugs me, is if I go to File->Export and then select the directories that I need - Eclipse doesn't remember them next time. It means that I can use the toolbar button to do a silent deployment (Ctrl+Alt+E). Is there a way to fix this?
malloys
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-22-2014
10:01 AM
Re: ReadAsciiFile returns empty string
"AlexHolsgrove" wrote:
That's exactly the problem - Eclipse wasn't including the directories with my XML (and other assets: viewtopic.php?f=34&t=44784)
The one thing that bugs me, is if I go to File->Export and then select the directories that I need - Eclipse doesn't remember them next time. It means that I can use the toolbar button to do a silent deployment (Ctrl+Alt+E). Is there a way to fix this?
The bug is centered around directory selection/deselection. This was reported yesterday by RokuJoel. I'm now just waiting for the official go-ahead to fix it.
In the meantime... if you select the individual files instead of the directories, it will remember your selections between exports.

AlexHolsgrove
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-27-2014
04:07 AM
Re: ReadAsciiFile returns empty string
Thanks for the update. I should have raised it as a bug had I know the issue was the plugin and not Eclipse.