AutoHotKey(오토핫키) 설명서 Loop,READ

Posted by 발전소장
2014. 8. 14. 13:40 AutoHotKey/Commands

Loop,READ

텍스트 파일을1행씩 읽어들여, 반복 처리를 실시한다

Loop, Read, InputFile [, OutputFile, FutureUse]

Parameters

인수명설명
Read 제일 인수는 「READ」라고 한다.변수에 격납해 참조해도 상관없다.
InputFile 읽어들이고 싶은 파일명.
상대 패스로 지정하면,%A_WorkingDir% (으)로부터 검색된다.
OutputFile 루프의 사이,FileAppend커멘드를 제2인수를 생략 해 실행하면, 이 파일에 써진다.
루프중에서 최초로FileAppend(을)를 사용했을 때에 열려 그 후 루프를 빠질 때까지 연 채로 있다.
커멘드를 실행할 때마다 다시 여는 것이 없기 때문에, 제2인수를 붙여 실행하는 것보다 퍼포먼스가 좋아진다.
상대 패스로 지정하면,%A_WorkingDir% (으)로부터 검색된다.
파일명의 선두에 「*」(을)를 붙이면, 바이너리 모드로 열려 개행 코드의 자동변역(LF→CR+LF)(을)를 하지 않게 된다.
파일명을 「*」라고 하면, 제2인수 없음의FileAppend그리고 스크립트의 표준 출력에 문자열을 출력할 수 있다.
FutureUse 장래의 확장을 위해서 확보되고 있다.현재 이 인수는 무시된다.

Remarks

읽어내진 행(개행은 포함하지 않는다)(은)는 「A_LoopReadLine」로서 참조할 수 있다.

65534문자를 넘는 행은, 여러 차례로 나누어 읽힌다.

개행 코드는,CR+LF(와)과LF에 대응(CR에는 비대응)

파일의 각 행을 읽어내려면 ,FileReadLine커멘드를 사용하는 방법도 있지만,Loop, Read(을)를 사용하는 편이 효율이 좋다.

읽어들인 행을StringSplit커멘드나Loop,PARSE그리고 더욱 분할할 수도 있다.

그 외의 사양은, 통상의Loop(와)과 같이.

Related

FileRead, FileReadLine, FileAppend, Sort, Loop, Break, Continue, Blocks, FileSetAttrib, FileSetTime

Example(s)

; Example #1: Only those lines of the 1st file that contain
; the word FAMILY will be written to the 2nd file.  Uncomment
; this line to overwrite rather than append to any existing file:
;FileDelete, C:\Docs\Family Addresses.txt

Loop, read, C:\Docs\Address List.txt, C:\Docs\Family Addresses.txt
{
	IfInString, A_LoopReadLine, family, FileAppend, %A_LoopReadLine%`n
}

; Example #2: A working script that attempts to extract all FTP and HTTP
; URLs from a text or HTML file:
FileSelectFile, SourceFile, 3,, Pick a text or HTML file to analyze.
if SourceFile =
	return  ; This will exit in this case.

SplitPath, SourceFile,, SourceFilePath,, SourceFileNoExt
DestFile = %SourceFilePath%\%SourceFileNoExt% Extracted Links.txt

IfExist, %DestFile%
{
	MsgBox, 4,, Overwrite the existing links file? Press No to append to it.`n`nFILE: %DestFile%
	IfMsgBox, Yes
		FileDelete, %DestFile%
}

LinkCount = 0
Loop, read, %SourceFile%, %DestFile%
{
	URLSearchString = %A_LoopReadLine%
	Gosub, URLSearch
}
MsgBox %LinkCount% links were found and written to "%DestFile%".
return


URLSearch:
; It's done this particular way because some URLs have other URLs embedded inside them:
StringGetPos, URLStart1, URLSearchString, http://
StringGetPos, URLStart2, URLSearchString, ftp://
StringGetPos, URLStart3, URLSearchString, www.

; Find the left-most starting position:
URLStart = %URLStart1%  ; Set starting default.
Loop
{
	; It helps performance (at least in a script with many variables) to resolve
	; "URLStart%A_Index%" only once:
	StringTrimLeft, ArrayElement, URLStart%A_Index%, 0
	if ArrayElement =  ; End of the array has been reached.
		break
	if ArrayElement = -1  ; This element is disqualified.
		continue
	if URLStart = -1
		URLStart = %ArrayElement%
	else ; URLStart has a valid position in it, so compare it with ArrayElement.
	{
		if ArrayElement <> -1
			if ArrayElement < %URLStart%
				URLStart = %ArrayElement%
	}
}

if URLStart = -1  ; No URLs exist in URLSearchString.
	return

; Otherwise, extract this URL:
StringTrimLeft, URL, URLSearchString, %URLStart%  ; Omit the beginning/irrelevant part.
Loop, parse, URL, %A_Tab%%A_Space%<>  ; Find the first space, tab, or angle (if any).
{
	URL = %A_LoopField%
	break  ; i.e. perform only one loop iteration to fetch the first "field".
}
; If the above loop had zero iterations because there were no ending characters found,
; leave the contents of the URL var untouched.

; If the URL ends in a double quote, remove it.  For now, StringReplace is used, but
; note that it seems that double quotes can legitimately exist inside URLs, so this
; might damage them:
StringReplace, URLCleansed, URL, ",, All
FileAppend, %URLCleansed%`n
LinkCount += 1

; See if there are any other URLs in this line:
StringLen, CharactersToOmit, URL
CharactersToOmit += %URLStart%
StringTrimLeft, URLSearchString, URLSearchString, %CharactersToOmit%
Gosub, URLSearch  ; Recursive call to self.
return


AutoHotKey(오토핫키) 설명서 Loop,PARSE

Posted by 발전소장
2014. 8. 14. 13:39 AutoHotKey/Commands

Loop,PARSE

문자열을 지정의 단락 문자로 분할하고, 각각 대해 반복 처리

Loop, Parse, InputVar [, Delimiters, OmitChars, FutureUse] 

Parameters

인수명설명
Parse 제일 인수는 「PARSE」(으)로 한다.
변수는 사용할 수 없다.
InputVar 분할되는 문자열이 격납된 변수명.
「%Name%」(와)과 같이 하면, 「Name」변수에 격납된 문자열이 변수명으로서 사용된다.
Delimiters 단락 문자로서 사용하고 싶은 문자를 열거한다.
특정의 「문자열」을 단락으로 하고 싶은 경우,StringReplace그리고 치환하고 나서 처리하면 좋다.
「CSV」라고 하면,CSV형식의 데이터로서 처리된다.「"first field",SecondField,"the word ""special"" is quoted literally",,"last field, has literal comma"」(와)과 같은 데이터를 잘 처리할 수 있다.
생략시는,1아르바이트씩 처리된다.
OmitChars 각 필드의 선두와 말미로부터 없애고 싶은 문자를 열거.

FutureUse 장래의 확장을 위해서 확보되고 있다.현재 이 인수는 무시된다.

Remarks

「A_LoopField」변수로 잘라진 문자열을 참조할 수 있다.

InputVar의 내용은 루프 개시전에 퇴피되므로, 루프내에서InputVar의 변수의 내용을 변경해도 영향은 없다.

Sort커멘드를 사용하면, 필드를 문자 코드순서에 줄서 바꾸고 나서 처리할 수 있다.

StringSplit그렇지만 문자열을 분할할 수 있지만,Loop,PARSE쪽이 퍼포먼스가 높다.

그 외의 사양은, 통상의Loop(와)과 같이.

Related

StringSplit, Loop, Break, Continue, Blocks, Sort, FileSetAttrib, FileSetTime

Example(s)

; Example #1:
Colors = red,green,blue
Loop, parse, Colors, `,
{
	MsgBox, Color number %a_index% is %A_LoopField%.
}

; Example #2: Read the lines inside a variable, one by one (similar to a file-reading loop).
; A file can be loaded into a variable via FileRead:
Loop, parse, FileContents, `n, `r
{
	MsgBox, 4, , Line number %a_index% is %A_LoopField%.`n`nContinue?
	IfMsgBox, No, break
}

; Example #3: This is the same as the example above except that it's for the clipboard.
; It's useful whenever the clipboard contains files, such as those copied from an open
; Explorer window (the program automatically converts such files to their file names):
Loop, parse, clipboard, `n, `r
{
	MsgBox, 4, , File number %a_index% is %A_LoopField%.`n`nContinue?
	IfMsgBox, No, break
}
; Example #4: Parse a comma separated value (CSV) file:
Loop, read, C:\Database Export.csv
{
	LineNumber = %A_Index%
	Loop, parse, A_LoopReadLine, CSV
	{
		MsgBox, 4, , Field %LineNumber%-%A_Index% is:`n%A_LoopField%`n`nContinue?
		IfMsgBox, NO, return
	}
}


AutoHotKey(오토핫키) 설명서 Loop

Posted by 발전소장
2014. 8. 14. 13:38 AutoHotKey/Commands

Loop

커멘드 혹은 블록을 지정 회수 혹은break등이 실행될 때까지 반복한다

Loop [, Count]

Parameters

인수명설명
Count 반복의 회수.
생략 했을 경우,break인가return인가Goto그리고 처리를 빠질 때까지 무한하게 반복한다.
「%Count%」(와)과 같은 변수 참조도 사용할 수 있다.
식은 사용할 수 없다.

Remarks

Loop커멘드의 후에는, 반드시 커멘드나 블록이 온다.

Loop안에서break커멘드가 실행되면, 반복을 빠져 반복 커멘드·블록의 다음의 행에 실행이 옮긴다.

Loop블록내에서Continue커멘드가 실행되면, 거기로부터 블록의 마지막까지의 처리가 스킵 되어 다음의 회에 진행된다.

반복의 회수는 짜넣어 변수 「A_Index」로서 참조할 수 있다.
A_Index(은)는, 반복의1번째에서는 「1」이다.
루프가2중이 되어 있을 때는, 안쪽의 회수를 취득할 수 있다.외측의 것을 참조하고 싶으면, 다른 변수에 퇴피해 둘 필요가 있다.
A_Index(은)는 루프의 밖에서는 「0」(이)가 된다.

인수에 숫자 이외의 것이 지정되었을 때, 특수한 루프가 된다.
파일 패스의 와일드 카드라면,File loop, 레지스트리의 루트 키명이라면Registry loop, 「Parse」(이)라면문자열 분할 루프, 「Read」(이)라면File-read loop.

Related

File loop, Registry loop, File-read loop, Parsing loop, Break, Continue, Blocks

Example(s)

Loop, 3
{
	MsgBox, Iteration number is %A_Index%.  ; A_Index will be 1, 2, then 3
	Sleep, 100
}

Loop
{
	if a_index > 25
		break  ; Terminate the loop
	if a_index < 20
		continue ; Skip the below and start a new iteration
	MsgBox, a_index = %a_index% ; This will display only the numbers 20 through 25
}