Jump to content

Help with referencing number of elements from a FileListToArray


 Share

Recommended Posts

Having some trouble using _FileListToArray function.

I have read the help file and I confirmed the first element [0] in the array is the number of files/folders in the array. In my case that would be 3 files. If I manually enter "3" in the "For $i = 2 to 3" then it works, however if I use "For $i = 2 to $aDocs[0]" or "For $i = 2 to $aDocs[0]-1" I can not get it to work. I'm sure I am missing something simple. I would just like to reference the number of items in the array list in my For statement.

This works...

Local $aDocs = _FileListToArray($sPath)

For $i = 2 to 3
With $oWord.Selection
.EndKey(6)
.InsertBreak(7)
.InsertFile($sPath & $aDocs[$i])
EndWith
Next

but this doesn't...

Local $aDocs = _FileListToArray($sPath)

For $i = 2 to $aDocs[0]
With $oWord.Selection
.EndKey(6)
.InsertBreak(7)
.InsertFile($sPath & $aDocs[$i])
EndWith
Next
Edited by tac
Link to comment
Share on other sites

Try this:

Local $aDocs = _FileListToArray($sPath)

For $i = 2 to Ubound($aDocs) - 1 ;I have added Ubound function
With $oWord.Selection
.EndKey(6)
.InsertBreak(7)
.InsertFile($sPath & $aDocs[$i])
EndWith
Next

Hi!

My UDF: NetInfo UDF Play with your network, check your download/upload speed and much more! YTAPI Easy to use YouTube API, now you can easy retrive all needed info from a video. NavInfo Check if a specific browser is installed and retrive other usefull information. YWeather Easy to use Yahoo Weather API, now you can easily retrive details about the weather in a specific region. No-IP UDF Easily update your no-ip hostname(s).

My Script: Wallpaper Changer Change you wallpaper dinamically, you can also download your wallpaper from your website and share it with all!   My Snippet: _ImageSaveToBMPConvert an image to bmp format. _SciteGOTO Open a file in SciTE at specific fileline. _FileToHex Show the hex code of a specified file

Link to comment
Share on other sites

Try this script:

#include <File.au3>
#include <Array.au3>

Local $FileList = _FileListToArray(@DesktopDir)
If @error = 1 Then
    MsgBox(0, "", "No Folders Found.")
    Exit
EndIf
If @error = 4 Then
    MsgBox(0, "", "No Files Found.")
    Exit
EndIf

For $i = 1 To UBound($FileList) - 1
ConsoleWrite($FileList[$i] & @CRLF) ;Show all file contained in the desktop
Next

It uses Ubound and all seems to work good. And when you say "doesn't work" what the script exactly do ?

Hi!

My UDF: NetInfo UDF Play with your network, check your download/upload speed and much more! YTAPI Easy to use YouTube API, now you can easy retrive all needed info from a video. NavInfo Check if a specific browser is installed and retrive other usefull information. YWeather Easy to use Yahoo Weather API, now you can easily retrive details about the weather in a specific region. No-IP UDF Easily update your no-ip hostname(s).

My Script: Wallpaper Changer Change you wallpaper dinamically, you can also download your wallpaper from your website and share it with all!   My Snippet: _ImageSaveToBMPConvert an image to bmp format. _SciteGOTO Open a file in SciTE at specific fileline. _FileToHex Show the hex code of a specified file

Link to comment
Share on other sites

You don't need to use UBound with that function.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

For clarity, this is the full script. This script combines all word documents within the given folder path.

It works only if I manually use the number 3 in the For loop since i know there are 3 word docs in the folder.

#include
#include
#include

$sPath = "C:\test\"
Local $aDocs = _FileListToArray($sPath)


Local $oWord = _WordCreate(0,0,0)
Local $oDoc = _WordDocGetCollection($oWord, 0)

With $oWord.Selection
.InsertFile($sPath & $aDocs[1])
EndWith

For $i = 2 to 3
With $oWord.Selection
.EndKey(6)
.InsertBreak(7)
.InsertFile($sPath & $aDocs[$i])
EndWith
Next

$oWord.Activedocument.SaveAs($sPath & "Analysis Report.docx" )
$oWord.Application.Quit
Edited by tac
Link to comment
Share on other sites

And when you say "doesn't work" what the script exactly do ?

The requested action with this object has failed.:

.InsertFile($sPath & $aDocs[$i])

.InsertFile($sPath & $aDocs[$i])^ ERROR

Edited by tac
Link to comment
Share on other sites

Use ConsoleWrite to see what the value of $I is at that point, and also use consolewrite to see what $aDocs[$i] contains at the point of failure, should help troubleshoot the issue.

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

This works for me, only changes were no trailing backslash on the $sPath & adding it where needed on the .insertfile, and I use the [0] element for count rather than ubound. and set the parameter for filelisttoarray to only return files.

#include <File.au3>
#include <Array.au3>
#include <Word.au3>

$sPath = @DesktopDir & "\Combine_word_Docs" ;no backslash
Local $aDocs = _FileListToArray($sPath , "*" , 1)

;~ _ArrayDisplay($aDocs)

Local $oWord = _WordCreate(0,0,0)
Local $oDoc = _WordDocGetCollection($oWord, 0)


For $i = 1 to $aDocs[0]
With $oWord.Selection
.EndKey(6)
.InsertBreak(7)
.InsertFile($sPath & "\" & $aDocs[$i]) ; added backslash
EndWith
Next

$oWord.Activedocument.SaveAs($sPath & "\Analysis Report.docx")
$oWord.Application.Quit
Edited by boththose

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to comment
Share on other sites

ah OK i used arraydispay and realized that somehow the array that is defined at the beginning of the script is including the word doc that is saved at the end of the script. I got the script to work now, but I do not understand why it includes that file.

From the arraydisplay:

[0]|4

[1]|test1.docx

[2]|test2.docx

[3]|test3.docx

[4]|~$alysis Report.docx

Edited by tac
Link to comment
Share on other sites

_FileListToArray returns the fourth file because it exists.

Is your Windows Explorer still set in the default nanny-mode where it does not show files with the hidden attirbute?

Go into folder options/view and tell your PC to trust you to see hidden files.

The tilde-prefixed file is a temporary MS Office file. Each time your script crashes with the object error Word is left hanging with the open temp file. You have to manually clean up by starting Task Manager, going to the Processes tab and executing "End Process" on all the WINWORD.EXE processes you see. Sometimes the temp file does become orphaned and will remain after all the processes are closed. If so, once you're able to view hidden files, simply delete it.

Edited by Spiff59
Link to comment
Share on other sites

_FileListToArray returns the fourth file because it exists.

Is your Windows Explorer still set in the default nanny-mode where it does not show files with the hidden attirbute?

Go into folder options/view and tell your PC to trust you to see hidden files.

The tilde-prefixed file is a temporary MS Office file. Each time your script crashes with the object error Word is left hanging with the open temp file. You have to manually clean up by starting Task Manager, going to the Processes tab and executing "End Process" on all the WINWORD.EXE processes you see. Sometimes the temp file does become orphaned and will remain after all the processes are closed. If so, once you're able to view hidden files, simply delete it.

I don't think this is it. I already am showing hidden files, and yes every time the script crashes I know I need to manually end my winword.exe.

Even if I put a Sleep(xxxx) after the arraydisplay, it still shows the word file that is not saved to that folder until the end of the script.

Edited by tac
Link to comment
Share on other sites

You should do a check of the file names to see if any of them start with the tilde, if they do, bypass them, or pop up a dialog box asking if you want to process that one too.

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

  • Moderators

tac,

Or you could use my RecFileListToArray UDF which allows you to exclude this type of file from the returned array. :)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

You should do a check of the file names to see if any of them start with the tilde, if they do, bypass them, or pop up a dialog box asking if you want to process that one too.

tac,

Or you could use my RecFileListToArray UDF which allows you to exclude this type of file from the returned array. :)

M23

Thanks for the suggestions. There seems to be many ways to work around the issue, I was just curious why it was recognizing the file before it is created?
Link to comment
Share on other sites

It doesn't happen for me, I ran this script 4 times and not once did it find a file that wasn't in there when the script started. I'm thinking that there's a file in the folder that you don't realize is there. That's the only explanation that I can come up with, because there's no way for the array to contain a filename that doesn't exist when the script reads the files in the folder, it's impossible because the _FileListToArray is run before any of the Word functions so the file shouldn't exist yet. If it does then you have other issues with either your computer, or your methodology.

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

either that or maybe you have killed previously running scripts and hung a word process with that file open? put a "runwait (taskkill /IM winword.exe)" at the top of the script, maybe that will help?

Disregard All Before (as it has been said) - i read through the thread after typing, as per usual

Edited by boththose

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

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

  • Recently Browsing   0 members

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