Jump to content
mycloutier

FileReadLine condition

Recommended Posts

mycloutier

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
BrewManNH

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

 

  • Like 1

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
Danyfirex

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

  • Like 1

Share this post


Link to post
Share on other sites
mycloutier

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
Danyfirex

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
guinness

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.

  • Like 1

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
JohnOne
#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

AutoIt Absolute Beginners    Require a serial    Pause Script    Video Tutorials by Morthawt   ipify 

Monkey's are, like, natures humans.

Share this post


Link to post
Share on other sites
mikell

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

×