MTA:Eir/FileSystem/file/readShort: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(Created page with "__NOTOC__ This function attempts to read a short (native type) from a file and returns it. The amount of bytes read should be two. ==Syntax== <syntaxhighlight lang="lua"> short file.readShort ...")
 
mNo edit summary
 
Line 4: Line 4:
==Syntax==
==Syntax==
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
short file.readShort ()
short file:readShort ()
</syntaxhighlight>
</syntaxhighlight>


Line 16: Line 16:
local function writeBuffers( outFile, buffers )
local function writeBuffers( outFile, buffers )
     -- Write header information.
     -- Write header information.
     outFile.writeInt( #buffers ); -- number of buffers
     outFile:writeInt( #buffers ); -- number of buffers
      
      
     -- Write the buffers.
     -- Write the buffers.
Line 23: Line 23:


         -- Write header of buffer.
         -- Write header of buffer.
         outFile.writeShort( #bufferContent ); -- length of buffer
         outFile:writeShort( #bufferContent ); -- length of buffer


         -- Write the content
         -- Write the content
         outFile.write( bufferContent );
         outFile:write( bufferContent );
     end
     end
end
end
Line 34: Line 34:


     -- Read header information.
     -- Read header information.
     local numBuffers = inFile.readInt();
     local numBuffers = inFile:readInt();


     -- Make sure we read the int correctly.
     -- Make sure we read the int correctly.
Line 43: Line 43:
         while ( n <= numBuffers ) do
         while ( n <= numBuffers ) do
             -- Read buffer header.
             -- Read buffer header.
             local bufferSize = inFile.readShort();
             local bufferSize = inFile:readShort();


             -- We always have to add the amount of buffers specified by the header.
             -- We always have to add the amount of buffers specified by the header.
Line 51: Line 51:
             if ( bufferSize ) then
             if ( bufferSize ) then
                 -- Read the buffer.
                 -- Read the buffer.
                 buffer = inFile.read( bufferSize );
                 buffer = inFile:read( bufferSize );
             end
             end


Line 73: Line 73:


-- Now retrieve them again.
-- Now retrieve them again.
theFile.seek( 0, "set" );
theFile:seek( 0, "set" );


myBuffers = readBuffers( theFile );
myBuffers = readBuffers( theFile );

Latest revision as of 23:35, 16 January 2022

This function attempts to read a short (native type) from a file and returns it. The amount of bytes read should be two.

Syntax

short file:readShort ()

Returns

Returns the short integer if it was successfully read from the file, false otherwise.

Example

Click to collapse [-]
Client

This snippet reads and writes string buffers into a custom file format.

local function writeBuffers( outFile, buffers )
    -- Write header information.
    outFile:writeInt( #buffers ); -- number of buffers
    
    -- Write the buffers.
    for m,n in ipairs( buffers ) do
        local bufferContent = tostring( n );

        -- Write header of buffer.
        outFile:writeShort( #bufferContent ); -- length of buffer

        -- Write the content
        outFile:write( bufferContent );
    end
end

local function readBuffers( inFile )
    local buffers = {};

    -- Read header information.
    local numBuffers = inFile:readInt();

    -- Make sure we read the int correctly.
    -- Fails if the file has less than 4 bytes to read.
    if ( numBuffers ) then
        local n = 1;

        while ( n <= numBuffers ) do
            -- Read buffer header.
            local bufferSize = inFile:readShort();

            -- We always have to add the amount of buffers specified by the header.
            -- Hence we always add a buffer to the result array.
            local buffer = "";

            if ( bufferSize ) then
                -- Read the buffer.
                buffer = inFile:read( bufferSize );
            end

            -- Append the result buffer.
            buffers[n] = buffer;

            n = n + 1;
        end
    end

    return buffers;
end

-- Manager some buffers in a file.
local myBuffers = { "Hello World!", "Cooking eggs on a frying pan", "The American Pizzas taste awesome", "There is no bathroom." };

local theFile = fileCreate( "buffers.dat" );

-- First write the buffers into the file.
writeBuffers( theFile, myBuffers );

-- Now retrieve them again.
theFile:seek( 0, "set" );

myBuffers = readBuffers( theFile );

-- Output the buffers.
for m,n in ipairs( myBuffers ) do
    outputChatBox( n );
end

FileSystem File Functions