[Solved] Read Memory Stream form findTableFile?
-
- Noobzor
- Posts: 13
- Joined: Thu Mar 02, 2017 11:15 pm
- Reputation: 0
[Solved] Read Memory Stream form findTableFile?
I'm am trying to read a table file, right now I just save it to disc then read file as normal, but how do I read the memory stream directly?
Last edited by STN on Thu Feb 10, 2022 11:13 pm, edited 2 times in total.
-
- Expert Cheater
- Posts: 103
- Joined: Tue May 02, 2017 6:00 am
- Reputation: 15
Re: Read Memory Stream form findTableFile?
So kinda figured it out
Gives me this output:
So I think this is the start of what I needed.
Code: Select all
local file = findTableFile('test.cea')
local lst = getPropertyList(file)
for i = 1, lst.Count - 1 do
print(lst[i])
end
local stream = file.getData()
print(stream)
local bytes = stream.read(stream.Size)
for i = 1, #bytes do
print(bytes[i], string.char(bytes[i]))
end
Code: Select all
stream
0EBD9B90
47 /
47 /
47 /
47 /
32
67 C
69 E
65 A
32
116 t
101 e
115 s
116 t
32
102 f
105 i
108 l
101 e
13
10
Re: Read Memory Stream form findTableFile?
The returned byte table can be convert to string with ce function byteTableToString
eg.
or use a stringStream which need not create intermediate Lua byte table (for performance?).
ps: if DB make .DataString work with MemoryStream, it will be just a property instead of custom function.
bye~
eg.
Code: Select all
local bytes = stream.read(stream.Size)
local str = byteTableToString(bytes)
Code: Select all
function GetTableFileAsString(tfName)
local tf = findTableFile(tfName)
if tf then
local ss = createStringStream()
ss.copyFrom(tf.Stream,tf.Stream.Size)
local ret = ss.DataString
ss.Destroy()
return ret
end
end
print(GetTableFileAsString("insert-table-file-name"))
bye~
-
- Expert Cheater
- Posts: 103
- Joined: Tue May 02, 2017 6:00 am
- Reputation: 15
Re: Read Memory Stream form findTableFile?
Thank you that's much nicer than what I had.
-
- Expert Cheater
- Posts: 103
- Joined: Tue May 02, 2017 6:00 am
- Reputation: 15
Re: Read Memory Stream form findTableFile?
hum..
This is what I had not sure which is cleaner..
EDIT:
Ended up using yours..
Definitely looks better!
This is what I had not sure which is cleaner..
Code: Select all
local stream = tableFile.getData()
local fileStr = nil
local bytes = stream.read(stream.Size)
for i = 1, #bytes do
if fileStr == nil then
fileStr = ''
end
fileStr = fileStr .. string.char(bytes[i])
end
Ended up using yours..
Code: Select all
if tableFile then
local ss = createStringStream()
ss.copyFrom(tableFile.Stream,tableFile.Stream.Size)
local fileStr = ss.DataString
ss.Destroy()
end
Last edited by TimFun13 on Sat Mar 04, 2017 8:44 am, edited 1 time in total.
-
- Expert Cheater
- Posts: 103
- Joined: Tue May 02, 2017 6:00 am
- Reputation: 15
Re: Read Memory Stream form findTableFile?
Though I think mine has places to fail.
Now Do I need to destroy the stream, I wouldn't think so, but if the stream is just some copy of the file memory then I mite need to?
I ask because of the destroy call on the return from createStringStream.
Now Do I need to destroy the stream, I wouldn't think so, but if the stream is just some copy of the file memory then I mite need to?
I ask because of the destroy call on the return from createStringStream.
Re: Read Memory Stream form findTableFile?
the stringstream is a different object than the tablefile. It just contains a copy after you made the copy, so you're free to destroy it
Who is online
Users browsing this forum: No registered users