Jump to content

Recommended Posts

Posted

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

Posted

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

Posted

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

Posted

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! :-)
 

Posted

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

Posted

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 parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples...

Updated: 22/04/2018

Posted (edited)
#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.

Posted (edited)

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

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