字符串處理與正則表達式

   功能:將cmd中的netstat -n的輸出作爲原始字符串做整理。


import console

var f = io.popen("netstat -n" )
var str = f.read( -1 );
//直接輸出中文會亂碼,所以先轉換
str2 = string.fromto(str,936,65001)
f.close();

io.open(); //打開控制檯
//io.print(str2); //輸出全部結果

var m1 = string.match(str2,"\s*<\a\a\a>\s*<\d*\p\d*\p\d*\p\d*\p\d*>\s*<\d*\p\d*\p\d*\p\d*\p\d*>\s*\u{4,}[D]")
var m2 = string.match(str2,"\s*<\a\a\a>\s*<\d*\p\d*\p\d*\p\d*\p\d*>\s*<\d*\p\d*\p\d*\p\d*\p\d*>\s*\u{4,}\p\u{2,}[T]")
var getnum = console.getNumber("選擇獲取一個連接:
1. 已建立的連接;
2. 主(被)動關閉的連接
")

if(getnum == 1){
	console.log(string.replace(m1,"\u{4,}[D]","已建立"))
	var m11 = string.fromto(m1,65001,936)
	string.save("C:\establish.txt",m11,true)
};
else {
	console.log(string.replace(m2,"\s*\u{4,}\p\u{2,}[T]","已關閉"))
	var m22 = string.fromto(m1,65001,936)
	string.save("C:\finish.txt",m22,true)
}

console.pause(true)


筆記:

1.字符串可以作爲數組取長度。其中都是以字節碼純存儲的。所以,a在遍歷中表示爲97。

2.每個變量都有自己的數據類型。用''引起來的都是字符串,所以num =123 和 num = "123"不同。用type(VAR)可以看到。也可以用type.string來判斷。

3.在用“+”算術運算時,編譯器會先嚐試把內容轉變成number類型,再做運算,轉換不成就報錯。如果只是想把兩個值連接起來,就用"++"。總結局勢+會把內容作爲數字來做,先轉換成number,++會直接轉換成字符串,然後拼接起來。

4.對與number類型,可以直接輸入其他 制的字符,如num=0xFF,0x9這樣的,只要前面有0x,就識別成十六進制。明確制定進制的方式也很簡單,如二進制用var = 2#10,就把#後面的字符處理成#前面的進制格式。最後,輸出的時候,會在屏幕上顯示爲10進制 

只是表示正數,就是無符號數。如果要用到有符號數表示正負數,要在前面增加一個bit,一個int,最大用4個byte來表示,即32個位。小數,或者叫float數,字節數翻翻,用64個位來表示,即16個byte。

5.轉意符:“\”,在單引號中,\可以作爲轉意符。在雙引號中識別爲字符串。如str='\t'表示位製表符,用str="\t"就是輸出\t。用'\n'來表示換行。如果在雙引號中,可以直接換行,輸入的回車會原樣打印。'\0'代表結束符。解釋器讀到這個字符後不再向後讀取了。

6.unicode字符(編碼格式爲UTF16,即用16個字節,2個字符來表示一個字符串):用 \u 後面跟着4個16進制的數來表示。或,在字符串最後面加一個u:str1='漢字utf16'u,這就代表生成了UTF16的字符串,不加u的時候就是成了一個UTF8的字符串str2="漢字utf8"。把這兩個變量在console.log(str1,str2)裏輸出時,aardio會自動轉換編碼爲控制檯所支持的ANSI編碼,否則一個是utf8,一個是utf16,就會亂碼。


同樣的,對utf16的unicode字符做循環遍歷時,要#str/2,且字符串下標操作符返回2個字節表示的unicode代碼。


7.在字符串中表示雙引號,可以使用3種方式:1.用反引號;2用兩個""來表示一個";3.把一個註釋串賦值給一個字符串變量。

8.讀入一個文件的方式:

本質是通過字符串賦值的方式:

var str = $"C:\Desktop\文檔.txt";

這樣就可以把這個文檔.txt裏的內容賦值給str。而且,支持直接拖入。其他的文件,比如圖片,也可以用這種方式直接拖入。如:

winform.image = $"C:\Desktop\1,jpg",aardio會把這個圖片處理成二進制直接打包。

9.直接下標:用兩對中括號:[[]]:用在對字符串for遍歷,每次輸出一個字符,而不是這個字符對應的編碼數。

10.字符串轉換:str = string.toUnicode(str,950) 代表把一個big5的編碼的str轉換成爲unicode模式。也可以從unicode轉換爲其他,例如str = string.fromto(str,第一種碼頁,第二種碼頁) 這樣就可以把一種碼轉換成另外一種。

11.字符串截取:string.left(str,3)表示從左邊開始取3個字節,如果要取三個字符,要求使用true函數:string.left(str,3,true)

12.字符串不會被修改,常量的內存是不可被修改的,但是可以用string.replace 方法來重新生成一個:

str = '字符串'

str2 = string.replace(str,"a","d")

13.UTF-8編碼是變長編碼,小部分漢字以3個字節存儲,大部分以4字節存儲,但是他的每個字節肯定都是大於十六進制的x80,即x80以上都是多字節。aardio中默認字符串就是UTF8編碼。


14.匹配模式只獲取第一個匹配到的結果,如果要多次匹配,需使用string.gmatch()

15.對字符串可以通過split來拆分成數組,windows下回車是<\r\n>:

import console
  
var str2 = $"C:\Users\weiting.hwt\Desktop\333.txt";
var str = string.fromto(str2,936,65001)
t = string.split(str,'<\r\n>');
console.log(#t)
console.log(t[1] )
 
console.pause(true)


對輸出的結果做分組,使用括號:

例如:

import console
  
var a,b,c = string.match("abcabcabcabc","(bc)(abc)(ab)")
console.log(a,b,c)

console.pause()


這樣,就把本來輸出的bcabcab分成了bc/abc/ab三個組了



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章