Jump to content

Using textRead2Func


Go to solution Solved by Jewtus,

Recommended Posts

I'm using this function to loop through a file and run a script: 

;==================================================================
;---> FUNCTION: textRead2Func($strFileName, $strFuncName)
;==================================================================
;DESCRIPTION:
;    This function reads a text file line by line and for each line the parsed function name will be called and the read line will be parsed into the called function.

;PARAMETERS:
;    $strFileName = The filename of an existing text file
;    $strFuncName = The name of function to process the read line, the function name should be parsed as a string.

;RETURN VALUES:
;     1 = The function completed successfully.
;    -1 = The file does not exist.
;    -2 = The file couldnt be opened, may be locked or no permissions.
;    -3 = The text file was empty.
;------------------------------------------------------------------
#cs
;######################### EXAMPLE CODE ##########################
textRead2Func(@ScriptDir & "\questions.txt", "debugOut")
Func debugOut($strToWrite)
    ConsoleWrite("-->" & $strToWrite & @CRLF)
EndFunc
;#################################################################
#ce
Func textRead2Func($strFileName, $strFuncName)
    Local $objTextFile, $strLine

    ;Make sure the file exists, if not, return an error code.
    If Not FileExists($strFileName) = 1 Then
        SetError(-1)
        Return -1
    EndIf

    ;Open the text file for reading.
    $objTextFile = FileOpen($strFileName, 0)

    ;Make sure the text file was opened successfully, otherwise return an error code.
    If $objTextFile = -1 Then
        SetError(-2)
        Return -2
    EndIf

    ;Read the first line to check whether the file is empty or not, if it is, return an error code.
    $strLine = FileReadLine($objTextFile)
    If @error Then
        SetError(-3)
        Return -3
    EndIf

    ;Call the parsed function name and parse the read line.
    Call($strFuncName, $strLine)

    ;Now, continue to read the rest of the file, line by line.
    While 1
        $strLine = FileReadLine($objTextFile)
        If @error Then ExitLoop

        ;Call the parsed function name and parse the read line.
        Call($strFuncName, $strLine)
    WEnd

    ;Release the opened text file object from memory.
    FileClose($objTextFile)

    ;Return a success code.
    Return 1
EndFunc

The file I'm using is a 5 column CSV with a | delimiter.

This is the code I'm executing:

textRead2Func(@ScriptDir & "\db\log\merged.csv", "splitsearch")
Func splitsearch($strToWrite)
    Local $aSearchstring = StringSplit($strToWrite,"|")
    For $z = 1 To $aSearchstring[0]
        MsgBox($MB_SYSTEMMODAL, "", "$aSearchstring[" & $z & "] - " & $aSearchstring[$z])
    Next
EndFunc

The issue I'm running into is that when the message box shows up, it shows up with

 

$aSearchstring[1] - ID

When I hit OK, it loops to 

 

$aSearchstring[1] - Name

How would I make it only do the ID and skip the other columns?

Edited by Jewtus
Link to comment
Share on other sites

Why not FileReadToArray()?

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

When I try:
 

$aFulldat=FileReadToArray(@ScriptDir & '\db\log\merged.csv')
_ArrayDisplay($aFulldat)

Nothing shows up

EDIT: I also tried this:

#include <MsgBoxConstants.au3>

Example()

Func Example()
    ; Read the current script file into an array using the filepath.
    Local $aArray = FileReadToArray(@ScriptDir & '\db\log\merged.csv')
    If @error Then
        MsgBox($MB_SYSTEMMODAL, "", "There was an error reading the file. @error: " & @error) ; An error occurred reading the current script file.
    Else
        For $i = 0 To UBound($aArray) - 1 ; Loop through the array.
            MsgBox($MB_SYSTEMMODAL, "", $aArray[$i]) ; Display the contents of the array.
        Next
    EndIf
EndFunc   ;==>Example

and got an @error1

 

Ideally, I'd like to just write the first column to an array and then loop through the array.

I was figuring I would do something like this with the above script:

extRead2Func(@ScriptDir & "\db\log\merged.csv", "splitsearch")
Func splitsearch($strToWrite)
    Local $aSearchstring = StringSplit($strToWrite,"|")
    For $z = 1 To $aSearchstring[0]
       ; MsgBox($MB_SYSTEMMODAL, "", "$aSearchstring[" & $z & "] - " & $aSearchstring[$z])
        _IENavigate($oIE, "http://www.google.com/search?q=" & $z)
    Next
EndFunc

I haven't figured out the next steps, but I'm going to log the outputs to a file. If I can do this with a loop through an array, that would be significantly simpler.

Edited by Jewtus
Link to comment
Share on other sites

  • Moderators

Jewtus,

Running this script (on the latest Beta 3.3.11.5):

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

Global $aArray

_FileReadToArray("CSV.txt", $aArray, $FRTA_COUNT, "|")

_ArrayDisplay($aArray, "", Default, 8)
works perfectly for me when used on this 5-column "|"-delimited file:

Row 1 Col 1|Row 1 Col2|Row 1 Col 3|Row 1 Col 4|Row 1 Col 5
Row 2 Col 1|Row 2 Col2|Row 2 Col 3|Row 2 Col 4|Row 2 Col 5
Row 3 Col 1|Row 3 Col2|Row 3 Col 3|Row 3 Col 4|Row 3 Col 5
Row 4 Col 1|Row 4 Col2|Row 4 Col 3|Row 4 Col 4|Row 4 Col 5
Row 5 Col 1|Row 5 Col2|Row 5 Col 3|Row 5 Col 4|Row 5 Col 5
Does it work for you? :huh:

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

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...