2010/1/4 Regina Henschel <[email protected]>:
> Hi Johnny,
>
> I had found, that there is a problem with the Seek statement, see
> http://www.openoffice.org/issues/show_bug.cgi?id=61280
> Another error concerning put is in
> http://www.openoffice.org/issues/show_bug.cgi?id=61389
> And another problem with this ancient file access.
> http://www.openoffice.org/issues/show_bug.cgi?id=61277

61277 seems to be the bug that I am talking about, so obviously there
is a bug report at least. Too bad that no one seems to care about
OpenOffice.org Basic anymore.

Regards

Johnny Rosenberg


>
> kind regards
> Regina
>
> Johnny Rosenberg schrieb:
>>
>> The first thing I did was to look in AndrewMacro.odt, the famous macro
>> document by Andrew Pitonyak. I found this example, and I actually also
>> found the same example in the OpenOffice.org BASIC help section, that
>> seems to be broken though (I added line numbers to it, so I can easier
>> refer to it later):
>> 00. '?? This is broken!
>> 01. Sub ExampleRandomAccess
>> 02.   Dim iNumber As Integer, aFile As String
>> 03.   Dim sText As Variant REM Must be a variant
>> 04.   aFile = "c:\data1.txt"
>> 05.   iNumber = Freefile
>> 06.   Open aFile For Random As #iNumber Len=5
>> 07.   Seek #iNumber,1 REM Position at beginning
>> 08.   Put #iNumber,, "1234567890" REM Fill line with text
>> 09.   Put #iNumber,, "ABCDEFGHIJ"
>> 10.   Put #iNumber,, "abcdefghij"
>> 11.   REM This is how the file looks now!
>> 12.   REM 08 00 0A 00 31 32 33 34  35 36 37 38 39 30 08 00
>> ....1234567890..
>> 13.   REM 0A 00 41 42 43 44 45 46  47 48 49 4A 08 00 0A 00
>> ..ABCDEFGHIJ....
>> 14.   REM 61 62 63 64 65 66 67 68  69 6A 00 00 00 00 00 00   abcdefghij
>> 15.   REM
>> 16.   Seek #iNumber,1
>> 17.   Get #iNumber,,sText
>> 18.   Print "on open:"&  sText
>> 19.   Close #iNumber
>> 20.   iNumber = Freefile
>> 21.   Open aFile For Random As #iNumber Len=5
>> 22.   Get #iNumber,,sText
>> 23.   Print "reopened: "&  sText
>> 24.   Put #iNumber,,"ZZZZZ"
>> 25.   Get #iNumber,1,sText
>> 26.   Print "anoter get "&  sText
>> 27.   Get #iNumber,1,sText
>> 28.   Put #iNumber,20,"This is the text in record 20"
>> 29.   Print Lof(#iNumber)
>> 30.   Close #iNumber
>> 31. End Sub
>>
>> Broken or not, maybe it will help me to understand this thing I
>> thought, so I tried it out.
>>
>> I guess the brokenness in this is that the idea is that after
>> reopening in line 21, text should be added at the end of the file in
>> line 24, but in fact it isn't. After executing the macro, the file is
>> 42 bytes with the text added in line 28 located at the end of the
>> file.
>>
>> In line 06 and 21, does Len=5 mean that each ”record” is 5 bytes? In
>> that case there are not as many as 20 records in the file when line 28
>> is going to be executed, so it feels natural that the last text
>> appears at the end of the text.
>>
>> Even if the text added in line 24 was added right after the text added
>> in line 08-10, there still wouldn't be as many as 20 records, would
>> it?
>>
>> It would be interesting however, to know why the text added in line 24
>> ends up at the beginning of the file, making the earlier added text
>> disappear.
>>
>> Anyway, for experimental purpose - I am a very beginner at this part
>> of macro programming, I rewrote the macro:
>> 00. Sub ExampleRandomAccess2
>> 01.   Dim iNumber As Integer, aFile As String
>> 02.   Dim sText As Variant REM Must be a variant
>> 03.   aFile = "~/data" REM I'm on Linux
>> 04.   iNumber = Freefile
>> 05.   Open aFile For Random As #iNumber Len=5
>> 06.   Seek #iNumber,1 REM Position at beginning
>> 07.   Put #iNumber,, "1234567890" REM Fill line with text
>> 08.   Put #iNumber,, "ABCDEFGHIJ"
>> 09.   Put #iNumber,, "abcdefghij"
>> 10.   REM This is how the file looks now!
>> 11.   REM 08 00 0A 00 31 32 33 34  35 36 37 38 39 30 08 00
>> ....1234567890..
>> 12.   REM 0A 00 41 42 43 44 45 46  47 48 49 4A 08 00 0A 00
>> ..ABCDEFGHIJ....
>> 13.   REM 61 62 63 64 65 66 67 68  69 6A 00 00 00 00 00 00   abcdefghij
>> 14.   REM
>> 15.   Seek #iNumber,1
>> 16.   Get #iNumber,,sText
>> 17.   Print "on open:"&  sText
>> 18.   Close #iNumber
>> 19.   iNumber = Freefile
>> 20.   Open aFile For Random As #iNumber Len=5
>> 21.   Get #iNumber,,sText
>> 22.   Print "reopened: "&  sText
>> 23.   Dim i As Integer, Msg As String
>> 24.   For i=1 To 50
>> 25.     Msg=Msg&  "<"&  Right("0"&  LTrim(Str(i)),2)&  ".>"
>> 26.   Next i
>> 27. '  Msg="ZZZZZ"
>> 28. '  Put #iNumber,,"ZZZZZ"
>> 29.   Put #iNumber,,Msg
>> 30.   Get #iNumber,1,sText
>> 31.   Print "anoter get "&  sText
>> 32.   Get #iNumber,1,sText
>> 33.   Put #iNumber,20,"This is not the text in record 20"
>> 34.   Print Lof(#iNumber)
>> 35.   Close #iNumber
>> 36. End Sub
>>
>> Instead of the ”ZZZZZ” I added numbers so I could easily see
>> approximately where in the file things ends up. Msg will contain
>> ”<01.><02.><03.><04.><05.><06.>… …<50.>” when the For loop at line
>> 24-26 is done.
>>  If I comment lines 30 and 32 (due to errors, more about that soon)
>> and run the macro, the text at line 33 actually seems to end up at
>> record 20, so that part works obviously.
>>
>> But a few more questions comes in mind when I run the macro as it is,
>> that is with the lines 30 and 32 intact. At line 30 the following
>> error message appears:
>> ”BASIC runtime error - Device I/O error” (last line translated from
>> Swedish, so I don't know the exact sentence).
>>
>> If I remove the comment from line 27, making Msg contain ”ZZZZ”, the
>> following message appears at line 31 (is that ”another” spelled wrong,
>> by the way?):
>> ”anoter get -8.39322075940694E-45”
>>
>> If uncommenting line 28 and commenting line 29, the following message
>> appears instead:
>> ”another get ZZZZZ” which I assume is correct.
>>
>> So for some reason I can't use a string variable instead of a string
>> like ”ZZZZZ”. Why is that?
>>
>> Does anyone know if the ”brokenness” I was talking about is a bug in
>> OpenOffice.org or if the macro just needs to be rewritten somehow?
>> Since this example is in the OpenOffice.org BASIC help section I think
>> it really need to be corrected (or the bug fixed), because it's very
>> frustrating to learn from examples if the examples doesn't work…
>>
>> Regards
>>
>> Johnny Rosenberg
>> OpenOffice.org 3.2 RC1
>> Ubuntu 8.10
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to