Jump to content

Recommended Posts

Posted

Hi i got problem with _FileWriteFromArray

my simple code:

#include <Array.au3>
#include <file.au3>
Global $array[2][2]

$array[0][0]="Nick1"
$array[0][1]="no"
$array[1][0]="Nick2"
 $array[1][1]="no"
_ArrayDisplay($array)

$aFile = FileOpen("array.txt", 1)
    _FileWriteFromArray($aFile, $array)
    FileClose($aFile)
    Exit

i got error:

C:\Program Files\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

what im doing wrong ??

Posted

It's not stated anywhere but the function only supports one-dimensional arrays (one array element is one line in the file).

My UDFs and Tutorials:

  Reveal hidden contents

 

Posted

Here you go >>

UDF List:

  Reveal hidden contents

Updated: 22/04/2018

Posted (edited)

Take the original _FileWriteFromArray and modify it a bit (this code is untested):

Func _FileWriteFromArrayEX($File, $a_Array, $i_Base = 0, $i_UBound = 0)
    ; Check if we have a valid array as input
    If Not IsArray($a_Array) Then Return SetError(2, 0, 0)

    ; determine last entry
    Local $last = UBound($a_Array) - 1
    If $i_UBound < 1 Or $i_UBound > $last Then $i_UBound = $last
    If $i_Base < 0 Or $i_Base > $last Then $i_Base = 0

    ; Open output file for overwrite by default, or use input file handle if passed
    Local $hFile
    If IsString($File) Then
        $hFile = FileOpen($File, $FO_OVERWRITE)
    Else
        $hFile = $File
    EndIf
    If $hFile = -1 Then Return SetError(1, 0, 0)

    ; Write array data to file
    Local $ErrorSav = 0
    For $x = $i_Base To $i_UBound
        ; concatenate all elements of a row into a string separated by |
        $line = ""
        For $y = 0 To UBound($a_Array, 2) -1
            $line &= $a_Array[$x][$y] & "|"
        Next
        $line = StringLeft($line, StringLen($line)-1) ; Strip of last pipe
        If FileWrite($hFile, $line & @CRLF) = 0 Then
            $ErrorSav = 3
            ExitLoop
        EndIf
    Next

    ; Close file only if specified by a string path
    If IsString($File) Then FileClose($hFile)

    ; Return results
    If $ErrorSav Then Return SetError($ErrorSav, 0, 0)
    Return 1
EndFunc   ;==>_FileWriteFromArrayEX

Or you could use functions.

Edited by water

My UDFs and Tutorials:

  Reveal hidden contents

 

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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...