[Gambas-user] reading files

Gianluigi bagonergi at ...626...
Thu Jul 20 11:56:56 CEST 2017


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
>



More information about the User mailing list