Jump to content
mycloutier

FileReadLine condition

Recommended Posts

Looking on some advice on how to tackle this issue!

I have a text file that is generated from another program. My goal is to write a script that would read each line in the text file and set a variable if a certain expression is found.

For example let's say the text file contains the following 4 lines of text :

Intel(R) Active Management Technology - SOL (COM4)
Communications Port (COM1)
Standard Serial over Bluetooth link (COM7)
Standard Serial over Bluetooth link (COM6)

I need to search for the following expression "Standard Serial over Bluetooth link" and associate the corresponding COM as a variable ... in this case there are 2 ... either COM6 or COM7.

This is the code I have so far :

#include "UIAWrappers.au3"
#include <MsgBoxConstants.au3>
#include <File.au3>
#include <FileConstants.au3>

Call("COMPorts")

Func COMPorts()

$file = "C:\GunTSTool\ports.txt"
FileOpen($file, 0)

For $i = 1 to _FileCountLines($file)
    $line = FileReadLine($file, $i)
If $line = "Standard Serial over Bluetooth link" Then
    msgbox(0,'','' & '' & $line)
ElseIf $line = "Prolific USB Cable" Then
    msgbox(0,'','' & '' & $line)
ElseIf $line = "Prolific USB to serial Cable" Then
    msgbox(0,'','' & '' & $line)
EndIf
Next
FileClose($file)

EndFunc

My main issue here is that the COM number will be changing all the time, I need to search only the text before the COM ... 

 

Any ideas?

 

Marty

Share this post


Link to post
Share on other sites

StringInStr would help.

#include <MsgBoxConstants.au3>
#include <File.au3>
#include <FileConstants.au3>

COMPorts()

Func COMPorts()

    $file = "C:\GunTSTool\ports.txt"
    $hFile = FileOpen($file)
    While 1
        $line = FileReadLine($hFile)
        If @error Then ExitLoop
        Select
            Case StringInStr($line, "Standard Serial over Bluetooth link")
                MsgBox($MB_SYSTEMMODAL, '', '' & '' & $line)
            Case StringInStr($line, "Prolific USB Cable")
                MsgBox($MB_SYSTEMMODAL, '', '' & '' & $line)
            Case StringInStr($line, "Prolific USB to serial Cable")
                MsgBox($MB_SYSTEMMODAL, '', '' & '' & $line)
        EndSelect
    WEnd
    FileClose($hFile)

EndFunc   ;==>COMPorts

 


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

Share this post


Link to post
Share on other sites

my Try. Just for fun.

 

#Include <Array.au3>

Local $aData= FileReadToArray("1.txt")
Local $Find = "Standard Serial over Bluetooth link"


Local $NewArray[0]

For $i=0 to UBound($aData)-1
    If StringInStr($aData[$i],$Find) Then
        ReDim $NewArray[UBound($NewArray)+1]
        $NewArray[UBound($NewArray)-1]=Number(StringMid($aData[$i],StringInStr($aData[$i],"COM")+3))
    EndIf

Next

_ArrayDisplay($NewArray)

Saludos

Share this post


Link to post
Share on other sites

Thank you for all the replies. I have better idea on how to go about this ...

@mikell and @ Danyfirex both your example works as long as we are searching for "Standard Serial over Bluetooth link". I will be searching for more than one possibility...

@mikell with your example if I use this line of code for example, I will get a return on the array, however only getting the appropriate com number for the first option search string

$exp = "Prolific USB|Standard Serial over Bluetooth link"

@Danyfirex with your example I cannot get a return if I try to use more than one search string ...

Local $Find = "Prolific USB|Standard Serial over Bluetooth link"

I appreciate all the help! Thank you! :-)
 

Share this post


Link to post
Share on other sites

the main one. is not so much dinamic as mikell one. 

but. if 

Prolific USB|Standard Serial over Bluetooth link

Exist exactry same in the file. it should work.

Saludos

Share this post


Link to post
Share on other sites

You can now use @extended instead of UBound()

Local $aArray = FileReadToArray('Filepath')
For $i  = 0 To @extended - 1
    ; ...
Next

Documentation has been updated by the way, as I noticed an example didn't exist showcasing this.


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

Share this post


Link to post
Share on other sites
#include <String.au3>
#include <Array.au3>

$SearchString = "Standard Serial over Bluetooth link"

$SearchString &= " ("

$str = FileRead("whatever.txt")

$aPorts = _StringBetween($str, $SearchString, ")")

_ArrayDisplay($aPorts)

 

Edited by JohnOne

Share this post


Link to post
Share on other sites

OK, using this text from your 1st post :

Intel(R) Active Management Technology - SOL (COM4)
Communications Port (COM1)
Standard Serial over Bluetooth link (COM7)
Standard Serial over Bluetooth link (COM6)

This works

#Include <Array.au3>

$txt = FileRead("ports.txt")
$exp = "Communications Port|Standard Serial over Bluetooth link"

$res = StringRegExp($txt, '(?m)^.*(?:' & $exp & ').*COM(\d+)', 3)

_ArrayDisplay($res)

Edit
To get also the name of the concerned port in the array just remove " ?: "  in the pattern

Edited by mikell

Share this post


Link to post
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

×
×
  • Create New...