Jump to content
Sign in to follow this  
IanABoys

Problems with StringMid

Recommended Posts

IanABoys

I'm having trouble with the StringMid function. I'm placing data on the clipboard and then searching that data for a specific string and extracting a part of the data relative to the search string. The problem is StringMid is returning the numeric value of the string, not the string itself. Any ideas?

$data = ClipGet()

; Result "Other data then Patient ID: 12345678"

; Now search for a marker within that data

$instr = StringInStr($data,"Patient ID :",2)

; Grab the data from just after the search string

$data2 = StringMid($data,$instr+12,8)

;Gets 8 characters that just happens to be numbers and so call it a number when it's not

MsgBox(1,"Info",$data2*2)

;Works, multiplies what should be a string by 2

Share this post


Link to post
Share on other sites
Malkey

I'm having trouble with the StringMid function. I'm placing data on the clipboard and then searching that data for a specific string and extracting a part of the data relative to the search string. The problem is StringMid is returning the numeric value of the string, not the string itself. Any ideas?

$data = ClipGet()

; Result "Other data then Patient ID: 12345678"

; Now search for a marker within that data

$instr = StringInStr($data,"Patient ID :",2)

; Grab the data from just after the search string

$data2 = StringMid($data,$instr+12,8)

;Gets 8 characters that just happens to be numbers and so call it a number when it's not

MsgBox(1,"Info",$data2*2)

;Works, multiplies what should be a string by 2

From the AutoIt help file:-

Language Reference - Datatypes
In AutoIt there is only one datatype called a Variant. A variant can contain numeric or string data
and decides how to use the data depending on the situation it is being used in. For example, if you
try and multiply two variants they will be treated as numbers, if you try and concatenate (join) two
variants they will be treated as strings.

Some examples:

10 * 20 equals the number 200 (* is used to multiply two numbers)

10 * "20" equals the number 200

"10" * "20" equals the number 200

10 & 20 equals the string "1020" (& is used to join strings)

StringMid is returing a string. The "$data2*2" returns a number.

Also, if "Other data then Patient ID: 12345678" is copied to clipboard and the script is run, then " $instr = StringInStr($data,"Patient ID :",2)" will not return the position of the substring because of the absence or presence of the space between "ID" and ":".

Share this post


Link to post
Share on other sites
BrewManNH

Your whole problem isn't the string conversion issue, it's because there's no match found so it gets you the 8 characters from 12th through 20th characters from the string, and not what you're looking for. It's all about the space in your search string that shouldn't be there.

Edited by BrewManNH

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
somdcomputerguy

Is this what you're trying to get?

#include <String.au3>
$sVar = "Other data then Patient ID: 12345678"
$aVar = _StringBetween($sVar, 'ID: ', '')
MsgBox(0, '', $aVar[0] * 2)

- Bruce /*somdcomputerguy */  If you change the way you look at things, the things you look at change.

Share this post


Link to post
Share on other sites
guinness

Or without using _StringBetween >>

Local Const $sString = 'Other data then Patient ID: 12345678'
Local $iNumber = Number(StringRegExpReplace($sString, 'D', ''))
MsgBox(4096, '', $iNumber * 2)

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
IanABoys

Thanks, I'm a but new to this so I didn't realise the variable type were a bit loose compared to what I'm used to. All sorted.

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
Sign in to follow this  

×