Something is horribly wrong, or you're running on a 286 :-)
I just tested here, and the program runs on a 51 MB test file in about 5
seconds.
Some reasonably well commented code for you...
Public Sub Main()
Dim inFile, outFile As File
Dim buff As New Byte[1024]
Dim idx, remBytes, readSize As Integer
' CHANGE THIS to your input file
inFile = Open "/home/caveat/Downloads/mytestfile" For Read
' CHANGE THIS to your output file
outFile = Open "/home/caveat/Downloads/mytestfile.out2" For Create
' Remaining bytes starts as the total length of the file
remBytes = Lof(inFile)
' Until we reach the end of the input file...guess you could instead
check on remBytes...
While Not Eof(inFile)
If remBytes > buff.length Then
' Limit reading to the size of our buffer (the Byte[])
readSize = buff.length
Else
' Only read the bytes we have left into our buffer (the Byte[])
readSize = remBytes
Endif
' Read from the input file into our buffer, starting at offset 0 in
the buffer
buff.Read(inFile, 0, readSize)
' Update the number of bytes remaining...
remBytes = remBytes - readSize
' Run round each byte in our buffer
For idx = 0 To buff.length - 1
' Dunno if you need any conditions, I check for > 30 as I can put
newlines in the file to make it more readable for testing
If buff[idx] > 30 Then
' This is the 'trick' you need to apply... subtract 11 from
every byte in the file
' Not sure how you deal with edge cases... if you have a byte
of 5, is your result then 250?
buff[idx] = buff[idx] - 11
Endif
Next
' Write the whole buffer out to the output file
buff.Write(outFile, 0, readSize)
Wend
Close #inFile
Close #outFile
End
Kind regards,
Caveat
On 15-07-17 21:24, Benoît Minisini via Gambas-user wrote:
Le 15/07/2017 à 20:49, Tony Morehen a écrit :
Did you try Benoit's suggestion:
Public Sub Main()
Dim sIn as String
Dim sOut as String
sIn = File.Load("/home/fernando/temp/deah001.dhn")
sOut = Add11(sIn)
File.Save("/home/fernando/temp/deah001.11Added.dhn", sOut)
End
Public Sub Add11(InputString as String) as String
Dim bArray As Byte[]
Dim String11 As String
Dim i As Integer
bArray = Byte[].FromString(InputString)
For i = 0 To bArray.Max
bArray[i] += 11
Next
Return bArray.ToString
End
Just a remark:
You don't have to use Byte[].FromString.
You can use the Bute[].Read() method instead, to load the file
directly into the array. You save an intermediate string that way.
Regards,
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Gambas-user mailing list
Gambas-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user