Jump to content

_FileWriteFromArray problem


Recommended Posts

This is my first time using _FileWriteFromArray.

It looked straight forward but when I ran the script I got

C:\Program Files (x86)\AutoIt3\Include\File.au3 (256) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

If FileWrite($hFile, $a_Array[$x] & @CRLF) = 0 Then

If FileWrite($hFile, ^ ERROR

And I can't find the problem.

Pointers would help. Thanks

#include <array.au3>
#Include <File.au3>


$Root = ".\Data\"
Global Const $FileNameGalaxy = $Root & "Galaxy.UU"
Global Const $GalaxySize = 400 + Rand(200)
Global Const $MaxLinks = 40
Global $SectorLinks
Dim $SectorLinks[$GalaxySize+1][$MaxLinks+1]
;--------------------------------------------
Local $a
$hSplash = SplashTextOn("Galaxy","Creating")
For $itr = 1 To $GalaxySize
    ; determine number of sector links
    $Links = Rand(10)
    $SectorLinks[$itr][0] = RandomDesignation()
    ControlSetText("","", $hSplash, $GalaxySize - $itr)
    For $a = 1 To $Links
        $NewLink = Rand($GalaxySize)
        $FreeLink = FindEmptyLink($itr)
        If $NewLink <> 0 Then $SectorLinks[$itr][$FreeLink] = $NewLink
        $FreeLink = FindEmptyLink($NewLink)
        If $FreeLink <> 0 Then $SectorLinks[$NewLink][$FreeLink] = $itr
    Next
Next
SplashOff()
_ArrayDisplay($SectorLinks)
WriteGalaxy()


Func WriteGalaxy()
    $file = FileOpen($FileNameGalaxy, 2)
If $file = -1 Then
  MsgBox(16, "Fatal Error", "Can not create galaxy file")
  Exit
EndIf
    _FileWriteFromArray($file, $SectorLinks, 0)
    FileClose($file)
EndFunc

Func DesignationExists($Designation)
    For $a = 1 To $GalaxySize
        If StringUpper($SectorLinks[$a][0]) = StringUpper($Designation) Then Return $a
    Next
    Return 0
EndFunc

Func FindEmptyLink($Sector)
    For $a = 1 To $MaxLinks
        If $SectorLinks[$Sector][$a] = 0 Then Return $a
    Next
    Return 0
EndFunc

Func Rand($pMax)
Return Random(0, $pMax, 1)
EndFunc

Func RandomDesignation()
    While True
        $temp = Chr(65 + Rand(25))
        If $temp = "I" Then ContinueLoop
        If $temp = "O" Then ContinueLoop
        $Designation = "P" & Rand(9) & $temp & "-" & Rand(899)+100
        If Not DesignationExists($Designation) Then Return $Designation
    WEnd

EndFunc

[left][hr]

$mood = "whimsy"
$mode = "confused"
$randomChaos = True
Do
Something()
Until $Tired
[/left][left]Reflex (Arcade game)[/left][left]IX (Board game)[/left][left]The Word Game (Word game)[/left][left]Plastic Sliding Squares Puzzle (Puzzle)[/left]
Link to comment
Share on other sites

Hi Topher,

I'm not 100% sure but I guess this happens because you're using a multi-dimensional array.

Try using a 1-dimensional one.

Edited by hannes08
Regards,Hannes[spoiler]If you can't convince them, confuse them![/spoiler]
Link to comment
Share on other sites

What version of AutoIt3 are you using, because this was fixed in version 3.3.7.0? Previously, _FileWriteFromArray only worked with 1D arrays, it was changed to work with 2D arrays in that version.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

What version of AutoIt3 are you using, because this was fixed in version 3.3.7.0? Previously, _FileWriteFromArray only worked with 1D arrays, it was changed to work with 2D arrays in that version.

Hi BrewManNH,

really? I'm using 3.3.8.0 and it crashes with this little script:

#include <file.au3>
Dim $array[3][2] = [[2,2], ['Z1S1', 'Z1S2'], ['Z2S1', 'Z2S2']]
_ArrayDisplay($array)
_FileWriteFromArray("asdfghjkl.txt", $array)

Also I cannot find anything in the helpfile that points to _FileWriteFromArray() being able to use 2-Dim arrays...

:S

Regards,Hannes[spoiler]If you can't convince them, confuse them![/spoiler]
Link to comment
Share on other sites

Put this script into SciTE and run it and let me know what you see in the console output.

#include <Misc.au3>

; Version: 1.00. AutoIt: V3.3.8.1
; Retrieve the recommended information of the current system when posting a support question.
Local $sSystemInfo = 'I have a valid AutoIt support question and kindly provide the details of my system:' & @CRLF & @CRLF & _
        'AutoIt Version: V' & @AutoItVersion & ' [' & _Iif(@AutoItX64, 'X64', 'X32') & ']' & @CRLF & _
        'Windows Version: ' & @OSVersion & ' [' & _GetOSLanguage() & ']' & @CRLF & _
        'Language: ' & @OSLang & @CRLF & @CRLF
MsgBox(4096, 'This info has been copied to the clipboard. Use Ctrl + V to retrieve it.', $sSystemInfo)
ClipPut($sSystemInfo)

; #FUNCTION# ====================================================================================================================
; Name ..........: _GetOSLanguage
; Description ...: Retrieves the language of the OS, this supports 19 of the most popular languages.
; Syntax ........: _GetOSLanguage()
; Parameters ....: None
; Return values .: None
; Author ........: guinness
; Link ..........: http://www.autoitscript.com/forum/topic/131832-getoslanguage-retrieve-the-language-of-the-os/
; Example .......: No
; ===============================================================================================================================
Func _GetOSLanguage()
    Local $aString[20] = [19, "0409 0809 0c09 1009 1409 1809 1c09 2009 2409 2809 2c09 3009 3409", "0404 0804 0c04 1004 0406", "0406", "0413 0813", "0425", _
            "040b", "040c 080c 0c0c 100c 140c 180c", "0407 0807 0c07 1007 1407", "040e", "0410 0810", _
            "0411", "0414 0814", "0415", "0416 0816", "0418", _
            "0419", "081a 0c1a", "040a 080a 0c0a 100a 140a 180a 1c0a 200a 240a 280a 2c0a 300a 340a 380a 3c0a 400a 440a 480a 4c0a 500a", "041d 081d"]

    Local $aLanguage[20] = [19, "English", "Chinese", "Danish", "Dutch", "Estonian", "Finnish", "French", "German", "Hungarian", "Italian", _
            "Japanese", "Norwegian", "Polish", "Portuguese", "Romanian", "Russian", "Serbian", "Spanish", "Swedish"]
    For $i = 1 To $aString[0]
        If StringInStr($aString[$i], @OSLang) Then
            Return $aLanguage[$i]
        EndIf
    Next
    Return $aLanguage[1]
EndFunc   ;==>_GetOSLanguage

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

I ran that script in the first post, after changing the file path to the script directory, and it worked for me.

Here's a portion of the Galaxy.UU file's contents.

|209

P5S-175|223

P1T-752|62

P3H-940|203

P1E-807|267

P8U-970|318

P7L-916|146

P0P-600|147

P2G-417|243

P6E-972|4

P1N-866|74

P9X-602|404

P1U-257|320

P6C-810|246

P3G-991|9

P5A-876|286

P9K-328|175

P6L-179|390

P4P-107|150

P2T-677|40

P7E-608|31

P6P-843|319

P4H-975|353

P0F-721|179

P8Z-900|239

P4Z-911|239

P8F-443|11

P9J-864|41

P8J-896|343

P1T-936|277

P5P-752|308

P0A-491|20

P4J-273|72

P9V-441|296

P1B-186|342

P6D-852|65

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

Hi BrewManNH,

really? I'm using 3.3.8.0 and it crashes with this little script:

#include <file.au3>
Dim $array[3][2] = [[2,2], ['Z1S1', 'Z1S2'], ['Z2S1', 'Z2S2']]
_ArrayDisplay($array)
_FileWriteFromArray("asdfghjkl.txt", $array)

Also I cannot find anything in the helpfile that points to _FileWriteFromArray() being able to use 2-Dim arrays...

:S

It's hidden in the bugtracker under ticket #1712

EDIT: BTW, that script will crash because the Array.au3 UDF isnt' included.

EDIT2: The help file doesn't directly mention that it works with 2D arrays, but there's a new option for the $s_Delim character and a new error #4.

Edited by BrewManNH

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...