1) Numeric elements (bytes, bytearrays, shorts, integers, longs) can be read directly from the stream. ie (4 byte Integer) = Read #Stream As Integer. Gambas can handle little endian/big endian issues.
2) Fixed length strings must be handled in a two stage process. First, the required string length number of bytes is read into a byte array. This byte array is then converted to a string. Sample code:
Dim Bytes As New Byte[StringLength] Bytes.Read(Stream) FixedString = Bytes.ToString()Note: Bytes.ToString stops the string conversion at the first null or at the end of the array. Therfore, you don't have to worry about null-terminated strings.
v2 tags are more complicated, particularly since the tags can be ascii, either kind of utf16, or utf8 encoding. The code I sent has been tested with over 10,000 mp3 files has seems to have no issues.
On 2017-07-19 12:33 AM, Shane wrote:
thank you Gian i did take a rest and read but alas it did not helpas far as i see it he is saying don't use binary file for fixed length stringsbut as this is an mp3 file tag witch i have no control i am doomed On 18/07/17 19:22, Gianluigi wrote:Why do not you take a moment of rest and read what Tobias Boege recommendme in the discussion [0] I told you here [1]? [0]http://gambas.8142.n7.nabble.com/Random-access-files-with-fixed-length-string-td50880.html[1] http://gambas.8142.n7.nabble.com/vb-code-td59764.html 2017-07-18 9:04 GMT+02:00 Shane <buster6se...@gmail.com>:------------------------------------------------------------------------------I am very confused from the docs _Variable_ *= READ* [ *#* _Stream_ ] *AS* _Datatype_ _Variable_ *= READ* [ *#* _Stream_ *,* ] _Length_ so wouldn't it be_ _ IDtag = read #hfile as ID3v1_TAG ? with doesn't work by the way On 18/07/17 12:44, nand...@nothingsimple.com wrote:I think Read #hfile, IDtag, ID3v1_TAG should be Read #hfile, IDtag as ID3v1_TAG -- Open WebMail Project (http://openwebmail.org) ---------- Original Message ----------- From: Shane <buster6se...@gmail.com> To: gambas-user@lists.sourceforge.net Sent: Tue, 18 Jul 2017 10:50:43 +1000 Subject: Re: [Gambas-user] reading files i don't know what i am doing wrongPublic Struct ID3v1_TAG '(128 bytes) Tag[3] As String 'always TAG Title[30] As String 'title, 30 characters Artist[30] As String 'artist, 30 characters Album[30] As String 'album, 30 characters Year[4] As String 'year, 4 charactersComment[30] As String 'comment, 30 characters (or 28 iftrack# included) Genre As Byte 'genre, 255 for none defined End Struct Private Sub GetID3v1(File As String) Dim IDtag As ID3v1_TAG Dim hfile As File hfile = Open File For Read ' 'read the tag ' seek to end of less tag size Read #hfile, IDtag, ID3v1_TAG here i get IDtag is NULL On 18/07/17 05:05, nand...@nothingsimple.com wrote:Yes it is possible, I do it. here is some code (incomplete) -Nando (Canada) ' top of class file Public Struct recstruc _a as integer _b as integer _c as integer end struct ' a function public function openAfile(filename as string) as file dim hfile as file dim arec as recstruc hfile = open filename for read write create with arec 'some values to write. ._a = 1 ._b = 22 ._c = 333 end with write #hfile, arec as recstruc 'if you position the hfile pointer back to zero, you can... read #hfile, arec as recstruc close #hfile end -- Open WebMail Project (http://openwebmail.org) ---------- Original Message ----------- From: T Lee Davidson <t.lee.david...@gmail.com> To: gambas-user@lists.sourceforge.net Sent: Sun, 16 Jul 2017 12:42:35 -0400 Subject: Re: [Gambas-user] reading files On 07/16/2017 06:57 AM, Shane wrote:given this example PRIVATE SUB BinaryRead(FilePath AS String) DIM binaryFile AS File DIM i AS Integer DIM b AS Byte DIM s AS Short DIM s1 AS String DIM s2 AS String ' Read binary file binaryFile = OPEN FilePath FOR READ READ #binaryFile, i READ #binaryFile, b READ #binaryFile, s READ #binaryFile, s1 READ #binaryFile, s2 CLOSE #binaryFile ' Display results PRINT i PRINT b PRINT s PRINT s1 PRINT s2 END is there a way for gambas to read a struct of all these variables in one read ? You may have hinted at the solution within your question. Have youconsidered using a Structure? http://gambaswiki.org/wiki/lang/read :"... reads the stream Stream as binary data whose type is specified bythe Datatype argument." "The returned datatype can be one of the following: NULL, Boolean, Byte, Short,Integer, Long, Pointer, Single, Float, Date, String, Variant, anyArray, Collection or structure." http://gambaswiki.org/wiki/lang/structdecl -- Lee ------------------------------------------------------------ ------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user------- End of Original Message ------- ------------------------------------------------------------ ------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user------------------------------------------------------------ ------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user------- End of Original Message ------- ------------------------------------------------------------ ------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user------------------------------------------------------------ ------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-userCheck out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user------------------------------------------------------------------------------Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user
Mp3Tag.tar.gz
Description: application/gzip
------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user