AutoHotKey - DirCopy keeps throwing "failed" exception - exception

I'm simply trying to copy a folder to another, but DirCopy keeps failing and I'm not sure why...
#Requires AutoHotkey v2.0
clipboard := A_Clipboard
arr := StrSplit(clipboard, "`n")
source_folder := "C:\Users\####\Documents\AutoHotkey\WT"
destination_folder := "C:\Users\###\Documents\AutoHotkey\PSDT"
Loop arr.length
{
name_part := arr[A_Index]
sps := StrSplit(name_part, A_Tab)
name_part := sps[1]
ep := sps[2]
aim := ""
dos := "FR " name_part " " ep
Loop Files, source_folder "\FR " name_part "*", "D"
aim := A_LoopFilePath
aim := Trim(aim "\" dos)
MsgBox ". " aim
MsgBox "> " destination_folder "\" dos
if DirExist(aim)
MsgBox "The target folder does exist."
DirCreate destination_folder "\Folder"
DirCopy( aim, destination_folder "\" dos)
}
The Folder is created and the aim does exist.
I've tried to launch the script in admin mode (right-click : run as administrator)
Does anyone has an idea why this Exception is occurring?

Okay! I've found the solution!
The problem came from the very source. The clipboard was filled from 4 cells in a sheet.
I thought the structure was
Elmt1 \t Elmt2 \n
Elmt3 \t Elmt4 \n
But it was not just a Line Feed, but a End Of Line instead.
So, the line to fix was at the beginning, corrected like this:
arr := StrSplit(clipboard, "`r`n")

Related

Creating a variable by passing alrd made variables into a function (R language)

I am a little bit confuse on running my code I already write the code for the first and second prompts on the screenshot. But, it won't run when I hit resources. I ask my friend, it's correct. I'm so lost.
Prompt:
Create a variable my_intro by passing your variables my_name and my_age
into your make_introduction() function
Using the str_count function, create a variable occurrences that stores
the # of times the letter "e" appears in my_intro
my code:
make_introduction <- function(name, age){
cat("Hello, my name is", name, ",", " ", "and I'm", age,"years old.")
}
make_introduction("Stephanie",20)
make_introduction <- function(my_name, my_age){
cat(" ", "Hello, my name is", my_name, ",", " ", "and I'm", my_age,"years old.")
}
my_intro <- make_introduction(my_name, my_age)
occurences <- str_count(my_intro, "e")

How to run an AutoIt script and call a function from it?

CONVERTER.au3 converts webp to png using dwebp:
Convert()
Func Convert()
$hSearch = FileFindFirstFile(#ScriptDir & "\*.webp")
$sFileName = FileFindNextFile($hSearch)
$Split = StringSplit($sFileName, ".")
;~ MsgBox(0,'',$Split[1])
Run("dwebp.exe " & $sFilename & " -o " & $Split[1] & ".png")
EndFunc
Func Troubleshoot()
Convert()
Local $hSearch
If $hSearch = -1 Then
$desktopCON = "supported"
Else
$desktopCON = "unsupported"
EndIf
FileClose($hSearch)
Exit
EndFunc
I need to run CONVERTER.au3 and call a specific function from it. I tried this but doesn't seem to work:
Run("D:\SCRIPT\NEW\CONVERTER.au3 Call(Convert)")
Parameters are referenced with the $CmdLine array. The first element ($CmdLine[0] is the number of parameters, $CmdLine[1] is the first parameter, etc.).
If $CmdLine[0] = 0 Then ; standard behavour for no params
Convert()
Exit
EndIf
If $CmdLine[1] = "convert" Then ; param is "convert"
Convert()
Exit
EndIf
If $CmdLine[1] = "troubleshoot" Then ; param is "troubleshoot"
Troubleshoot()
Exit
EndIf
MsgBox(0, "ERRROR", "undefined function: " & $CmdLine[1])
Func Convert()
MsgBox(0, "", "your converting code here")
EndFunc ;==>Convert
Func Troubleshoot()
MsgBox(0, "", "your troubleshooting code here")
EndFunc ;==>Troubleshoot
Execute it from AutoIt with Run('"Converter.au3" foobar')
or from the Windows Command line with just converter.au3 troubleshoot
If no parameter is given, it executes a default function (or whatever you want it to do).

vimscript: commands that work in mappings, but not in functions

How can I rewrite these 2 commands, which work fine in a mapping, so that they will work in a function?
:if has_key(glos,#g)==1<cr>:let #j=eval('glos.'.#g)<cr>
The function concerned is executed by vim without comment, but #j remains unchanged, as if they had failed, but no message/error is generated.
Here is the complete code involved, the command that loads the dictionary, the function that does not work, and the mapping from that function that does.
" read the glossary into the dictionary, glos
let glos=eval(join(readfile("glossary.dict")))
" 2click item of interest and this will
" send image filepath to xv
" if item all-caps find same at start of its line
" If capitalized at eol find same at start of its line
" if all lower-case at eol find next occurrence of same
" look lower-case or capitalized word up in glossary.txt
" find _\d\+ (page no.) alone on its line in text
com! F call F()
function! F()
normal "ayiw"cyE"by$
let #c=substitute(#c,"[,.?':;!]\+","","g")
if #c=~'images\/ss\d\d\d*'
let #i='!display -geometry +0+0 '.#c.' &'
pkill display
#i
elseif #c==toupper(#c)
let #n=search('^'.#c,'sw')
elseif #c!=#b
let #f=3
let #g=tolower(#c)
while #f>0
try
let #j=eval('glos.'.#g)
catch
let #f=#f-1
let #g=strpart(#g,0,strlen(#g)-1)
continue
endtry
break
endwh
if #f>0
let #h=substitute(#j," glosimgs.*",'','')
if #h!=#j
let #i='!xv -geometry +0+380 '.substitute(#j,'^.\{-}\( glosimgs.*\)$','\1','').' &'
!pkill xv
#i
endif
echo #h
else
echo 'No matching entry for '.#c
endif
elseif #c=~'\u\l\+$'
let #n=search('^'.#c,'sw')
elseif #c=~'\l\+$'
norm *
elseif #c=~'^_\w\+$'
let #/='^'.#c.'$'
norm nzz
endif
endfunction
map <silent> <2-LeftMouse> "ayiw"cyE"by$:let #c=substitute(#c,"[,.?':;!]\+","","g")<cr>:if #c=~'images\/ss\d\d\d*'<cr>:let #i='!display -geometry +0+0 '.#c.' &'<cr>:pkill display<cr>:#i<cr>:elseif #c==toupper(#c)<cr>:let #n=search('^'.#c,'sw')<cr>:elseif #c!=#b<cr>:let #f=3<cr>:let #g=tolower(#c)<cr>:while #f>0<cr>:try<cr>:let #j=eval('glos["'.#g.'"]')<cr>:catch<cr>:let #f=#f-1<cr>:let #g=strpart(#g,0,strlen(#g)-1)<cr>:continue<cr>:endtry<cr>:break<cr>:endwh<cr>:if #f>0<cr>:let #h=substitute(#j," glosimgs.*",'','')<cr>:if #h!=#j<cr>:let #i='!xv -geometry +0+380 '.substitute(#j,'^.\{-}\( glosimgs.*\)$','\1','').' &'<cr>:!pkill xv<cr>:#i<cr>:endif<cr><cr<cr>>:echo #h<cr>:else<cr>:echo 'No matching entry for '.#c<cr>:endif<cr>:elseif #c=~'\u\l\+$'<cr>:let #n=search('^'.#c,'sw')<cr>:elseif #c=~'\l\+$'<cr>:norm *<cr>:elseif #c=~'^_\w\+$'<cr>:let #/='^'.#c.'$'<cr>:norm nzz<cr>:endif<cr>
Specifically, I should have written:
:if has_key(**g:**glos,#g)==1:let #j=eval('**g:**glos.'.#g)
:h g: goes straight to the heart of the matter; in a function all references are local to that function, so references to any variable outside the function must be global, by prepending 'g:' to the variable name. As I created the dictionary independent of the function, the function must reference it as a global item.
Of course, if you are not aware of 'g:', it is rather difficult to find that help reference, but that's a frequent problem using help.
And, of course, the ** surrounding g: aren't required, that's what this site gives you in lieu of bolded text, apparently.

New to autoit, what is wrong with this variable?

so today I just started learning this language, and I'm trying to make my script with parts of example scripts from https://www.autoitscript.com/autoit3/docs/functions.
I'm trying to run a mysql query and I'm getting "Variable Undeclared" error even if it declared as a Global one (atleast i think i declared it as one..)
Basically what my script should do is make an ID for every machine in my LAN store it into a txt file in AppData and then insert it into a db.
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include "EzMySql.au3"
#include <Array.au3>
Example()
Func Example()
$id = Random(1, 1000, 1);Numar random de la 1 la 100
Local Const $sFilePath = #AppDataDir & "\id.txt" ; Selectare %appdata% si id.txt
Local $iFileExists = FileExists($sFilePath)
If $iFileExists Then
Else
; Create a temporary file to write data to.
If Not FileCreate($sFilePath, $ID & #CRLF) Then Return MsgBox($MB_SYSTEMMODAL, "", "O eroare s-a produs in timp ce se scria fila temporara")
; Open the file for writing (append to the end of a file) and store the handle to a variable.
Global $hFileOpen = FileOpen($sFilePath, $FO_APPEND)
If $hFileOpen = -1 Then
MsgBox($MB_SYSTEMMODAL, "", "O eroare s-a produs in timp ce se citea fila.")
Return False
EndIf
; Read the contents of the file using the handle returned by FileOpen.
Global $sFileRead = FileRead($hFileOpen)
; Close the handle returned by FileOpen.
FileClose($hFileOpen)
EndIf
EndFunc
; Create a file.
Func FileCreate($sFilePath, $sString)
Local $bReturn = True ; Create a variable to store a boolean value.
If FileExists($sFilePath) = 0 Then $bReturn = FileWrite($sFilePath, $sString) = 1 ; If FileWrite returned 1 this will be True otherwise False.
Return $bReturn ; Return the boolean value of either True of False, depending on the return value of FileWrite.
EndFunc ;==>FileCreate
$name=#ComputerName
If Not _EzMySql_Startup() Then
MsgBox(0, "Error Starting MySql", "Error: "& #error & #CR & "Error string: " & _EzMySql_ErrMsg())
Exit
EndIf
If Not _EzMySql_Open("127.0.0.1", "root", "", "vrgaming", "3306") Then
MsgBox(0, "Error opening Database", "Error: "& #error & #CR & "Error string: " & _EzMySql_ErrMsg())
Exit
EndIf
If Not _EzMySql_Exec("INSERT INTO `lan` (id, nume) VALUES ('"& $sFileRead &"', '"& $name &"')") Then
MsgBox(0, "Error opening Database", "Error: "& #error & #CR & "Error string: " & _EzMySql_ErrMsg())
Exit
EndIf
_EzMySql_Close()
_EzMySql_ShutDown()
Exit
There are a number of logic issues with the code, that makes it a little tricky to follow.
The error in this case is almost certainly caused because "id.txt" exists, and so $iFileExists evaluates to true, and the global variable is never created.
Then you are creating a new "id.txt", for writing, before reading all the data, so $sFileRead will always be blank and FileRead will set #error as you are trying to read from a file opened for writing.
Now, I think you want the $sFileRead to be whatever the contents of id.txt is, and id.txt should be created with a new random id if it doesn't exist. If so then you need to move the code that opens and reads the file outside of the Else...Endif block (in addition to changing FileOpen to use $FO_READ).
This answer doesn't address the questionable programming practice and code structure.

Corona reading and writing files (first time access)

I'm trying to write a function that will read sound and music states before starting my application.
The problem is: The first time it will run, there will be no data recorded.
First, I tried the suggested JSON function from here and I got this error:
Attempt to call global 'saveTable' (a nil value)
Is there a way to test if the file exists?
Then, I tried this one:
-- THIS function is just to try to find the file.
-- Load Configurations
function doesFileExist( fname, path )
local results = false
local filePath = system.pathForFile( fname, path )
--filePath will be 'nil' if file doesn,t exist and the path is "system.ResourceDirectory"
if ( filePath ) then
filePath = io.open( filePath, "r" )
end
if ( filePath ) then
print( "File found: " .. fname )
--clean up file handles
filePath:close()
results = true
else
print( "File does not exist: " .. fname )
end
return results
end
local fexist= doesFileExist("optionsTable.json","")
if (fexist == false) then
print (" optionsTable = nil")
optionsTable = {}
optionsTable.soundOn = true
optionsTable.musicOn = true
saveTable(optionsTable, "optionsTable.json") <<<--- ERROR HERE
print (" optionsTable Created")
end
The weird thing is that I'm getting an error at the saveTable(optionsTable,"optionsTable.json"). I just can't understand why.
If you have a working peace of code that handles the first time situation it will be enough to me. Thanks.
here's some code to check if the file exist you have to try and open the file first to know if it exist
function fileExists(fileName, base)
assert(fileName, "fileName is missing")
local base = base or system.ResourceDirectory
local filePath = system.pathForFile( fileName, base )
local exists = false
if (filePath) then -- file may exist wont know until you open it
local fileHandle = io.open( filePath, "r" )
if (fileHandle) then -- nil if no file found
exists = true
io.close(fileHandle)
end
end
return(exists)
end
and for usage
if fileExists("myGame.lua") then
-- do something wonderful
end
you can refer to this link for details