[Gambas-user] reading files

Shane buster6seven at ...626...
Thu Jul 20 12:09:56 CEST 2017


yep can't use structs have to do like tony's code works perfect thanks 
again tony

p.s is this your code ?



On 20/07/17 19:56, Gianluigi wrote:
> Right ... and a look here too [0]
>
> Ciao :)
> Gianluigi
>
> [0] http://www.gambas-it.org/smf/index.php?topic=5794.msg41793#msg41793
>
> 2017-07-20 3:15 GMT+02:00 Shane <buster6seven at ...626...>:
>
>> thanks tony sounds like just what i needed i will take a look
>>
>> cheers
>>
>>
>>
>> On 19/07/17 22:34, Tony Morehen wrote:
>>
>>> I've attached an archive containing the code I use to read v1 and v2 MP3
>>> tags and other MP3 info including bitrates (fixed and VBR), sampling rates
>>> and number of channels.  v1 tags are pretty staightforward to read if you
>>> don't try to read the structure directly, but by each element of the
>>> structure at a time.  Some tips:
>>>
>>> 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 help
>>>>
>>>> as far as i see it he is saying don't use binary file for fixed length
>>>> strings
>>>>
>>>> but 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
>>>>> recommend
>>>>> me in the discussion [0] I told you here [1]?
>>>>>
>>>>> [0]
>>>>> http://gambas.8142.n7.nabble.com/Random-access-files-with-fi
>>>>> xed-length-string-td50880.html
>>>>> [1] http://gambas.8142.n7.nabble.com/vb-code-td59764.html
>>>>>
>>>>> 2017-07-18 9:04 GMT+02:00 Shane <buster6seven at ...626...>:
>>>>>
>>>>> 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, nando_f at ...951... 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 <buster6seven at ...626...>
>>>>>>> To: gambas-user at 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 wrong
>>>>>>>
>>>>>>>> Public 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 characters
>>>>>>>>          Comment[30] As String          'comment, 30 characters (or
>>>>>>>> 28 if
>>>>>>>> track# 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, nando_f at ...951... 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.davidson at ...626...>
>>>>>>>>> To: gambas-user at 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 you
>>>>>>>>>>>
>>>>>>>>>> considered
>>>>>>>>>> using a Structure?
>>>>>>>>>>
>>>>>>>>>> http://gambaswiki.org/wiki/lang/read :
>>>>>>>>>> "... reads the stream Stream as binary data whose type is
>>>>>>>>>> specified by
>>>>>>>>>> the
>>>>>>>>>> Datatype argument."
>>>>>>>>>>
>>>>>>>>>> "The returned datatype can be one of the following: NULL, Boolean,
>>>>>>>>>> Byte, Short,
>>>>>>>>>>      Integer, Long, Pointer, Single, Float, Date, String, Variant,
>>>>>>>>>> any
>>>>>>>>>> Array,
>>>>>>>>>>      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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gambas-user





More information about the User mailing list