我们的代码当中有很多很多如下的代码:

  UarrMain[0] := AsMainType(edLayer, myStr, 'Layer', '结构层名称');

  UarrMain[1] := AsMainType(edKind, myStr, 'Kind', '稳定剂种类');

.......

   UArrSub[0] := AsSubType(myInt, True, 'seqnum', '序号');

  UArrSub[1] := AsSubType(myStr, False, 'BoxNumber', '试验盒号');

  UArrSub[2] := AsSubType(myFloat, False, 'BoxWeigth', '盒的质量');

.....

我现在需要提取第三个,第四个参数。

放上来,下次电脑坏就不用重新写了。工作当中用到的,可以减轻工作量。

一边学一边写的,比较手生,翻了很多次文档才写出来。关键是正则,当然没有考虑所有的情况。
这门语言对GUI支持的不好,因为是面向服务器的开发。就胡乱弄了个B/S的,代码如下:

 

  1. package main 
  2. import  
  3. (   
  4.   "io" 
  5.   "fmt" 
  6.   "regexp" 
  7.   "strings" 
  8.    "net/http" 
  9.   
  10. const(  
  11.  SQL = "EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'AAAA', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CCCC', @level2type=N'COLUMN',@level2name=N'BBBB'" 
  12.  SQL2 = "EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'AAAA', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CCCC'" 
  13.  html =   
  14.   `<html> 
  15.    <head><title>提取<a/title></head> 
  16.    <body><form method = 'post'
  17.    TableName : <input type = "text" name = "tablename"></input> qs_Table 中的 TableName,比如 TestRecordC21 <br></br> 
  18.    表格名称 : <input type = "text" name = "tablename2"></input>比如 石料试验记录 <br></br> 
  19.    <textarea rows="20" cols="120" name = "target"></textarea><br></br> 
  20.    <input type = "submit" value = "Submit"></input> 
  21.    %s 
  22.    </form> 
  23.    </body> 
  24.    </html>` 
  25. )   
  26.   
  27. func mySearch(str string) (result string) { 
  28.   result = "" 
  29.   regSub := regexp.MustCompile(`(?i)AsSubType\s*\(\w+\s*\,\s*(True|False)\s*\,\s*\'\s*(\w+)\s*\'\s*\,\s*\'\s*(.*?)\s*\'`) 
  30.   regMain := regexp.MustCompile(`(?i)AsMainType\s*\(\w+\s*\,\s*(\w+)\s*\,\s*\'\s*(\w+)\s*\'\s*\,\s*\'\s*(.*?)\s*\'`) 
  31.    
  32.   resultSub := regSub.FindAllStringSubmatch(str, -1) 
  33.   resultMain := regMain.FindAllStringSubmatch(str, -1) 
  34.    
  35.   for _, V := range resultSub { 
  36.       result = result + strings.Replace(strings.Replace(SQL, "AAAA", V[3],-1), "BBBB", V[2], -1) + 
  37.                 "<br></br>" + " GO " + "<br></br>" 
  38.  } 
  39.   
  40.   for _, V := range resultMain { 
  41.   result = result + strings.Replace(strings.Replace(SQL, "AAAA", V[3],-1), "BBBB", V[2], -1) + 
  42.                 "<br></br>" + " GO " + "<br></br>" 
  43.  } 
  44.   
  45.   return  
  46.   
  47. func Analyze(w http.ResponseWriter, r *http.Request) { 
  48.   if r.Method == "GET" { 
  49.     io.WriteString(w, strings.Replace(html, "%s""", -1)) 
  50.  return  
  51.   } 
  52.    
  53.   if r.Method == "POST"
  54.     str := r.FormValue("target"
  55.  tablename := r.FormValue("tablename"
  56.  tablename2 := r.FormValue("tablename2"
  57.  if tablename == "" { 
  58.    io.WriteString(w, strings.Replace(html, "%s""<div border = '1'>" +  
  59.       "TableName 没有填写 " +"</div>", -1)) 
  60.    return 
  61.  } 
  62.  if tablename2 == "" { 
  63.    io.WriteString(w, strings.Replace(html, "%s""<div border = '1'>" +  
  64.       "表格名称 没有填写 " +"</div>", -1)) 
  65.    return 
  66.  } 
  67.  if str == "" { 
  68.    io.WriteString(w, strings.Replace(html, "%s""<div border = '1'>" +  
  69.       "查找内容 没有填写 " +"</div>", -1)) 
  70.   return 
  71.  } 
  72.   
  73.  SQLCMD := strings.Replace(html, "%s""<div border = '1'>" +  
  74.       strings.Replace(mySearch(str), "CCCC", tablename, -1) +"</div>", -1) 
  75.     SQLCMD = SQLCMD + strings.Replace(strings.Replace(SQL2, "AAAA", tablename2, -1), "CCCC", tablename, -1) 
  76.  io.WriteString(w, SQLCMD) 
  77.   } 
  78.    
  79. func main(){  
  80.     fmt.Println("Open http://localhost:8888/extract"
  81.   http.HandleFunc("/extract", Analyze) 
  82.   err := http.ListenAndServe(":8888", nil) 
  83.   if err != nil { 
  84.     fmt.Println(err.Error()) 
  85.   } 
  86.