[Gambas-user] reading files

Tony Morehen tmorehen at ...3602...
Thu Jul 20 15:35:40 CEST 2017


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#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
>>>>
>>>
>>> ------------------------------------------------------------
>>> ------------------
>>> 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