Discussion:
[Gambas-user] reading files
Shane
2017-07-16 10:57:57 UTC
Permalink
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 ?
T Lee Davidson
2017-07-16 16:42:35 UTC
Permalink
Post by Shane
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
n***@nothingsimple.com
2017-07-17 19:05:58 UTC
Permalink
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 <***@gmail.com>
To: gambas-***@lists.sourceforge.net
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
Post by T Lee Davidson
Post by Shane
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?
"... 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
https://lists.sourceforge.net/lists/listinfo/gambas-user
------- End of Original Message -------
Shane
2017-07-18 00:50:43 UTC
Permalink
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
Post by n***@nothingsimple.com
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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
Post by T Lee Davidson
Post by Shane
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?
"... 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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
n***@nothingsimple.com
2017-07-18 02:44:57 UTC
Permalink
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 <***@gmail.com>
To: gambas-***@lists.sourceforge.net
Sent: Tue, 18 Jul 2017 10:50:43 +1000
Subject: Re: [Gambas-user] reading files
Post by Shane
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
Post by n***@nothingsimple.com
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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
Post by T Lee Davidson
Post by Shane
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?
"... 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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
------- End of Original Message -------
Shane
2017-07-18 07:04:04 UTC
Permalink
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
Post by n***@nothingsimple.com
I think
Read #hfile, IDtag, ID3v1_TAG
should be
Read #hfile, IDtag as ID3v1_TAG
--
Open WebMail Project (http://openwebmail.org)
---------- Original Message -----------
Sent: Tue, 18 Jul 2017 10:50:43 +1000
Subject: Re: [Gambas-user] reading files
Post by Shane
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
Post by n***@nothingsimple.com
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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
Post by T Lee Davidson
Post by Shane
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?
"... 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
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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Gianluigi
2017-07-18 09:22:18 UTC
Permalink
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-fixed-length-string-td50880.html
[1] http://gambas.8142.n7.nabble.com/vb-code-td59764.html
Post by Shane
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
Post by n***@nothingsimple.com
I think
Read #hfile, IDtag, ID3v1_TAG
should be
Read #hfile, IDtag as ID3v1_TAG
--
Open WebMail Project (http://openwebmail.org)
---------- Original Message -----------
Sent: Tue, 18 Jul 2017 10:50:43 +1000
Subject: Re: [Gambas-user] reading files
i don't know what i am doing wrong
Post by Shane
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
Post by n***@nothingsimple.com
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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
Post by T Lee Davidson
Post by Shane
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?
"... 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
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
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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Shane
2017-07-19 04:33:45 UTC
Permalink
This post might be inappropriate. Click to display it.
Gianluigi
2017-07-19 11:45:19 UTC
Permalink
You can take a look at our Italian wiki [0][1][2] using Google Translate.
You can also subscribe and ask a question in English, I do not understand
mp3, but there is someone who understands it.

Regards
Gianluigi

[0]
http://www.gambas-it.org/wiki/index.php?title=Estrarre_informazioni_e_TAG_da_un_file_MP3_con_le_sole_funzioni_di_Gambas
[1]
http://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Gestione_dei_dati_audio_e_dei_file_audio
[2]
http://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Struttur
Post by Shane
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
Post by Gianluigi
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
I am very confused from the docs
Post by Shane
_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
I think
Post by Shane
Read #hfile, IDtag, ID3v1_TAG
should be
Read #hfile, IDtag as ID3v1_TAG
--
Open WebMail Project (http://openwebmail.org)
---------- Original Message -----------
Sent: Tue, 18 Jul 2017 10:50:43 +1000
Subject: Re: [Gambas-user] reading files
i don't know what i am doing wrong
Post by Shane
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
Yes it is possible, I do it. here is some code (incomplete)
Post by n***@nothingsimple.com
-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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
Post by Shane
given this example
Post by Shane
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?
"... 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
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
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
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
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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Tony Morehen
2017-07-19 12:34:04 UTC
Permalink
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.
Post by Shane
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
Post by Gianluigi
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-fixed-length-string-td50880.html
[1] http://gambas.8142.n7.nabble.com/vb-code-td59764.html
Post by Shane
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
Post by n***@nothingsimple.com
I think
Read #hfile, IDtag, ID3v1_TAG
should be
Read #hfile, IDtag as ID3v1_TAG
--
Open WebMail Project (http://openwebmail.org)
---------- Original Message -----------
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
Post by n***@nothingsimple.com
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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
Post by T Lee Davidson
Post by Shane
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?
"... 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
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
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
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
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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Gianluigi
2017-07-19 21:06:49 UTC
Permalink
A very interesting work 👍

Regards
Gianluigi
Post by Tony Morehen
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
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
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.
Post by Shane
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
Post by Gianluigi
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
I am very confused from the docs
Post by Shane
_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
I think
Post by Shane
Read #hfile, IDtag, ID3v1_TAG
should be
Read #hfile, IDtag as ID3v1_TAG
--
Open WebMail Project (http://openwebmail.org)
---------- Original Message -----------
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
Yes it is possible, I do it. here is some code (incomplete)
Post by n***@nothingsimple.com
-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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
Post by Shane
given this example
Post by Shane
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?
"... 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
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
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
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
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
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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Shane
2017-07-20 01:15:55 UTC
Permalink
thanks tony sounds like just what i needed i will take a look

cheers
Post by Tony Morehen
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
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.
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.
Post by Shane
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
Post by Gianluigi
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-fixed-length-string-td50880.html
[1] http://gambas.8142.n7.nabble.com/vb-code-td59764.html
Post by Shane
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
Post by n***@nothingsimple.com
I think
Read #hfile, IDtag, ID3v1_TAG
should be
Read #hfile, IDtag as ID3v1_TAG
--
Open WebMail Project (http://openwebmail.org)
---------- Original Message -----------
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
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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
Post by T Lee Davidson
Post by Shane
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?
"... 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
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
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
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
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
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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Gianluigi
2017-07-20 09:56:56 UTC
Permalink
Right ... and a look here too [0]

Ciao :)
Gianluigi

[0] http://www.gambas-it.org/smf/index.php?topic=5794.msg41793#msg41793
Post by Shane
thanks tony sounds like just what i needed i will take a look
cheers
Post by Tony Morehen
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
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
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.
Post by Shane
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
Post by Gianluigi
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
I am very confused from the docs
Post by Shane
_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
I think
Post by Shane
Read #hfile, IDtag, ID3v1_TAG
should be
Read #hfile, IDtag as ID3v1_TAG
--
Open WebMail Project (http://openwebmail.org)
---------- Original Message -----------
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
Yes it is possible, I do it. here is some code (incomplete)
Post by n***@nothingsimple.com
-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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
Post by Shane
given this example
Post by Shane
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?
"... 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
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
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
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
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
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
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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Shane
2017-07-20 10:09:56 UTC
Permalink
yep can't use structs have to do like tony's code works perfect thanks
again tony

p.s is this your code ?
Post by Gianluigi
Right ... and a look here too [0]
Ciao :)
Gianluigi
[0] http://www.gambas-it.org/smf/index.php?topic=5794.msg41793#msg41793
Post by Shane
thanks tony sounds like just what i needed i will take a look
cheers
Post by Tony Morehen
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
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
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.
Post by Shane
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
Post by Gianluigi
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
I am very confused from the docs
Post by Shane
_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
I think
Post by Shane
Read #hfile, IDtag, ID3v1_TAG
should be
Read #hfile, IDtag as ID3v1_TAG
--
Open WebMail Project (http://openwebmail.org)
---------- Original Message -----------
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
Yes it is possible, I do it. here is some code (incomplete)
Post by n***@nothingsimple.com
-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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
Post by Shane
given this example
Post by Shane
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?
"... 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
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
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
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
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
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
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
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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Gianluigi
2017-07-20 11:04:46 UTC
Permalink
Post by Shane
yep can't use structs have to do like tony's code works perfect thanks
again tony
mmmmh are you sure?
Post by Shane
p.s is this your code ?
No, but you can easily see who wrote it :)
Post by Shane
Post by Gianluigi
Right ... and a look here too [0]
Ciao :)
Gianluigi
[0] http://www.gambas-it.org/smf/index.php?topic=5794.msg41793#msg41793
thanks tony sounds like just what i needed i will take a look
Post by Shane
cheers
I've attached an archive containing the code I use to read v1 and v2 MP3
Post by Tony Morehen
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
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
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.
thank you Gian i did take a rest and read but alas it did not help
Post by Shane
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
Why do not you take a moment of rest and read what Tobias Boege
Post by Gianluigi
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
I am very confused from the docs
Post by Shane
_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
I think
Post by Shane
Read #hfile, IDtag, ID3v1_TAG
should be
Read #hfile, IDtag as ID3v1_TAG
--
Open WebMail Project (http://openwebmail.org)
---------- Original Message -----------
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)
Post by Shane
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
Yes it is possible, I do it. here is some code (incomplete)
Post by n***@nothingsimple.com
-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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
given this example
Post by T Lee Davidson
Post by Shane
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?
"... 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
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
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
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
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
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
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
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
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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Shane
2017-07-20 11:16:22 UTC
Permalink
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 ?
Post by Gianluigi
Post by Shane
yep can't use structs have to do like tony's code works perfect thanks
again tony
mmmmh are you sure?
Post by Shane
p.s is this your code ?
No, but you can easily see who wrote it :)
Post by Shane
Post by Gianluigi
Right ... and a look here too [0]
Ciao :)
Gianluigi
[0] http://www.gambas-it.org/smf/index.php?topic=5794.msg41793#msg41793
thanks tony sounds like just what i needed i will take a look
Post by Shane
cheers
I've attached an archive containing the code I use to read v1 and v2 MP3
Post by Tony Morehen
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
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
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.
thank you Gian i did take a rest and read but alas it did not help
Post by Shane
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
Why do not you take a moment of rest and read what Tobias Boege
Post by Gianluigi
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
I am very confused from the docs
Post by Shane
_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
I think
Post by Shane
Read #hfile, IDtag, ID3v1_TAG
should be
Read #hfile, IDtag as ID3v1_TAG
--
Open WebMail Project (http://openwebmail.org)
---------- Original Message -----------
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)
Post by Shane
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
Yes it is possible, I do it. here is some code (incomplete)
Post by n***@nothingsimple.com
-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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
given this example
Post by T Lee Davidson
Post by Shane
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?
"... 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
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
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
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
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
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
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
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
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
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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Tony Morehen
2017-07-20 13:35:40 UTC
Permalink
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
(***@vbaccelerator.com) under an Apache style licence. The code has
since been heavily rewritten, translated to vb.net and finally
translated to gambas.
Post by Shane
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 ?
Post by Gianluigi
Post by Shane
yep can't use structs have to do like tony's code works perfect thanks
again tony
mmmmh are you sure?
Post by Shane
p.s is this your code ?
No, but you can easily see who wrote it :)
Post by Shane
Post by Gianluigi
Right ... and a look here too [0]
Ciao :)
Gianluigi
[0]
http://www.gambas-it.org/smf/index.php?topic=5794.msg41793#msg41793
thanks tony sounds like just what i needed i will take a look
Post by Shane
cheers
I've attached an archive containing the code I use to read v1 and v2 MP3
Post by Tony Morehen
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
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
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.
thank you Gian i did take a rest and read but alas it did not help
Post by Shane
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
Why do not you take a moment of rest and read what Tobias Boege
Post by Gianluigi
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
I am very confused from the docs
Post by Shane
_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
I think
Post by Shane
Read #hfile, IDtag, ID3v1_TAG
should be
Read #hfile, IDtag as ID3v1_TAG
--
Open WebMail Project (http://openwebmail.org)
---------- Original Message -----------
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)
Post by Shane
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
Yes it is possible, I do it. here is some code (incomplete)
Post by n***@nothingsimple.com
-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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
given this example
Post by T Lee Davidson
Post by Shane
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?
"... 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
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
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
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
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
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
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
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
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
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
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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Gianluigi
2017-07-20 16:22:01 UTC
Permalink
Hi Tony,
Sorry if i answered instead of you, but I did not understand who the
question was for :-(

Regards
Gianluigi
in 2010 in vb6. It was inspired by code provided by Steve McMahon (
since been heavily rewritten, translated to vb.net and finally translated
to gambas.
Post by Shane
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 ?
Post by Shane
yep can't use structs have to do like tony's code works perfect thanks
Post by Shane
again tony
mmmmh are you sure?
p.s is this your code ?
Post by Shane
No, but you can easily see who wrote it :)
Right ... and a look here too [0]
Post by Gianluigi
Ciao :)
Gianluigi
[0] http://www.gambas-it.org/smf/index.php?topic=5794.msg41793#m
sg41793
thanks tony sounds like just what i needed i will take a look
Post by Shane
cheers
I've attached an archive containing the code I use to read v1 and v2 MP3
Post by Tony Morehen
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
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
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.
thank you Gian i did take a rest and read but alas it did not help
Post by Shane
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
Why do not you take a moment of rest and read what Tobias Boege
Post by Gianluigi
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
I am very confused from the docs
_Variable_ *= READ* [ *#* _Stream_ ] *AS* _Datatype_
Post by Shane
_Variable_ *= READ* [ *#* _Stream_ *,* ] _Length_
so wouldn't it be_
_
IDtag = read #hfile as ID3v1_TAG ?
with doesn't work by the way
I think
Read #hfile, IDtag, ID3v1_TAG
Post by n***@nothingsimple.com
should be
Read #hfile, IDtag as ID3v1_TAG
--
Open WebMail Project (http://openwebmail.org)
---------- Original Message -----------
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)
Post by Shane
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
Yes it is possible, I do it. here is some code (incomplete)
-Nando (Canada)
Post by n***@nothingsimple.com
' 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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
given this example
Post by Shane
PRIVATE SUB BinaryRead(FilePath AS String)
Post by Shane
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?
"... 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
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
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
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
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
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
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
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
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
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
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
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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Tony Morehen
2017-07-20 18:27:22 UTC
Permalink
I've uploaded the class with a short command line demo to the software farm.
Post by Gianluigi
Hi Tony,
Sorry if i answered instead of you, but I did not understand who the
question was for :-(
Regards
Gianluigi
in 2010 in vb6. It was inspired by code provided by Steve McMahon (
since been heavily rewritten, translated to vb.net and finally translated
to gambas.
Post by Shane
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 ?
Post by Shane
yep can't use structs have to do like tony's code works perfect thanks
Post by Shane
again tony
mmmmh are you sure?
p.s is this your code ?
Post by Shane
No, but you can easily see who wrote it :)
Right ... and a look here too [0]
Post by Gianluigi
Ciao :)
Gianluigi
[0] http://www.gambas-it.org/smf/index.php?topic=5794.msg41793#m
sg41793
thanks tony sounds like just what i needed i will take a look
Post by Shane
cheers
I've attached an archive containing the code I use to read v1 and v2 MP3
Post by Tony Morehen
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
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
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.
thank you Gian i did take a rest and read but alas it did not help
Post by Shane
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
Why do not you take a moment of rest and read what Tobias Boege
Post by Gianluigi
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
I am very confused from the docs
_Variable_ *= READ* [ *#* _Stream_ ] *AS* _Datatype_
Post by Shane
_Variable_ *= READ* [ *#* _Stream_ *,* ] _Length_
so wouldn't it be_
_
IDtag = read #hfile as ID3v1_TAG ?
with doesn't work by the way
I think
Read #hfile, IDtag, ID3v1_TAG
Post by n***@nothingsimple.com
should be
Read #hfile, IDtag as ID3v1_TAG
--
Open WebMail Project (http://openwebmail.org)
---------- Original Message -----------
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)
Post by Shane
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
Yes it is possible, I do it. here is some code (incomplete)
-Nando (Canada)
Post by n***@nothingsimple.com
' 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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
given this example
Post by Shane
PRIVATE SUB BinaryRead(FilePath AS String)
Post by Shane
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?
"... 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Hans Lehmann
2017-07-20 18:40:19 UTC
Permalink
Post by Tony Morehen
I've uploaded the class with a short command line demo to the software farm.
Hello Tony,

under which heading can I find the class in the software farm?

Honsek
Tony Morehen
2017-07-20 18:50:55 UTC
Permalink
Audio or development
Post by Hans Lehmann
Post by Tony Morehen
I've uploaded the class with a short command line demo to the
software farm.
Hello Tony,
under which heading can I find the class in the software farm?
Honsek
------------------------------------------------------------------------------
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Shane
2017-07-22 01:53:45 UTC
Permalink
Hi tony I think i found a small bug in your code when reading mp3 files
with no version 2 tag

this function gets a end of stream error

Public Function ReadBytes(Count As Integer) As Byte[]

Dim res As New Byte[Count]
res.Read($Stream)
Return res
End

In the StreamReader Class

don't know if you want to do any thing about it ?

regards Shane
Post by Tony Morehen
Audio or development
Post by Hans Lehmann
Post by Tony Morehen
I've uploaded the class with a short command line demo to the software farm.
Hello Tony,
under which heading can I find the class in the software farm?
Honsek
------------------------------------------------------------------------------
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Jussi Lahtinen
2017-07-24 19:49:55 UTC
Permalink
"Title[30] As String" does not declare 30 characters, but 30 strings.


Jussi
Post by Shane
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
Post by n***@nothingsimple.com
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 -----------
Sent: Sun, 16 Jul 2017 12:42:35 -0400
Subject: Re: [Gambas-user] reading files
Post by T Lee Davidson
Post by Shane
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?
"... 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
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
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
https://lists.sourceforge.net/lists/listinfo/gambas-user
Loading...