For my job I need to copy a person's name out of a field and split it into first and last names. I have a AHK script that can do this but my version only works with simple, one-word,...
For my job I need to copy a person's name out of a field and split it into first and last names. I have a AHK script that can do this but my version only works with simple, one-word, non-hyphenated names. I tried prompting Gemini as below.
There is a line of text consisting of one or more words, a comma, then one or more words. write an autohotkey 1.1 script to select everything before the comma, store it to a variable called firstname, then select everything after the comma and store it to a variable called lastname. thanks
(the firstname and lastname variables should be swapped as the last name would come before the comma, that was my error)
Here's the AutoHotkey 1.1 script to achieve what you described:
; This script splits a text line into first and last name based on a comma
#NoEnv ; Recommended for performance and compatibility.
SendMode Input ; Simulates keystrokes for reliable input.
; Function to split the text
Func SplitText(_text, firstName, lastName) {
StringSplit, parts, _text, `,`
if (parts[1]) {
firstName := parts[1] ; Assign first name
lastName := SubStr(_text, 1 + StrLen(parts[1])+1) ; Extract last name after comma (including space)
} else {
firstName := _text ; Handle cases without a comma
lastName := ""
}
}
; Hotkey to trigger the script (replace F2 with your desired key)
F2::
Send, ^c ; Copy the selected text to clipboard
clipText := ClipboardAll ; Read the clipboard content
SplitText(clipText, firstName, lastName) ; Call the function to split the text
MsgBox, First Name: %firstName%`nLast Name: %lastName%
; Optional: Clear clipboard to avoid unintended pasting (comment out if not desired)
; Clipboard :=
Return
Explanation:
#NoEnv and SendMode Input: These lines are included for performance and reliable input simulation.
Func SplitText(_text, firstName, lastName): This function takes the text (_text) as input and assigns the split parts to variables firstName and lastName.
StringSplit, parts, _text, ,:** Splits the text based on the comma (,`) delimiter.
if (parts[1]):** Checks if there's a second part (i.e., text after the comma).
If true, the first part is assigned to firstName and the text after the comma (including the space) is extracted using SubStr and assigned to lastName.
else:** If there's no comma, the entire text is assigned to firstName and lastName is set to an empty string.
F2::: This line defines a hotkey. When F2 is pressed, the following actions occur:
Send, ^c:** Copies the selected text to the clipboard.
clipText := ClipboardAll:** Reads the copied text from the clipboard and stores it in the variable clipText.
SplitText(clipText, firstName, lastName):** Calls the function to split the copied text into first and last names.
MsgBox:** Displays a message box showing the extracted first name and last name.
Optional: Clear Clipboard: The commented line Clipboard := clears the clipboard content after processing. Uncomment this line if you want to avoid accidentally pasting the copied text elsewhere.
Edit: To answer questions, and provide info I probably should have from the beginning: I'm a medical transcriptionist using AHK with my job's software (Emdat Inscribe) and a word expander (Instant Text). Inscribe seems to be browser-based but functions as a standalone app. I already have dozens of AHK 1.1 macros; my .ahk file has over 2000 lines, although I'm sure it's terribly written code. This is also why I'm disinclined to switch to AHK 2.0 since I have no desire to rewrite everything unless absolutely necessary. The first part of this macro is a bunch of keypresses to jump to the relevant patient info field, then this part would be used to store the names appropriately. I already have hotkeys to use the variables as needed and most macros are limited with #ifwinactive to Inscribe.