[Gambas-user] reading files

Tony Morehen tmorehen at ...3602...
Thu Jul 20 20:27:22 CEST 2017


I've uploaded the class with a short command line demo to the software farm.


On 2017-07-20 12:22 PM, Gianluigi wrote:
> Hi Tony,
> Sorry if i answered  instead of you, but I did not understand who the
> question was for :-(
>
> Regards
> Gianluigi
>
> 2017-07-20 15:35 GMT+02:00 Tony Morehen <tmorehen at ...3602...>:
>
>> It is my code.  It started off life as part of a cd ripper program I wrote
>> in 2010 in vb6.  It was inspired by code provided by Steve McMahon (
>> steve at ...3671...) under an Apache style licence.  The code has
>> since been heavily rewritten, translated to vb.net and finally translated
>> to gambas.
>>
>>
>> On 2017-07-20 07:16 AM, Shane wrote:
>>
>>> with the code i was trying to adapt you can't
>>>
>>> i was getting strange values eg.
>>>
>>> a struct size of 208 when it was meant to be 128 and for some strange
>>> reason get end of file
>>>
>>> when seeking to eof less header even if i backed up more than the 208
>>> bytes
>>>
>>> i can see that tony didn't right it i should of said did he convert it to
>>> gambas ?
>>>
>>> i think this should be in the farm ?
>>>
>>>
>>>
>>>
>>> On 20/07/17 21:04, Gianluigi wrote:
>>>
>>>> 2017-07-20 12:09 GMT+02:00 Shane <buster6seven at ...626...>:
>>>>
>>>> yep can't use structs have to do like tony's code works perfect thanks
>>>>> again tony
>>>>>
>>>>> mmmmh are you sure?
>>>>
>>>> p.s is this your code ?
>>>>> No, but you can easily see who wrote it :)
>>>>
>>>>
>>>>> 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#m
>>>>>> sg41793
>>>>>>
>>>>>> 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
>>>>>>
>>>>>>
>>>>> ------------------------------------------------------------
>>>>> ------------------
>>>>> 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