主頁 > 軟體工程 > 有沒有研究過函式自動分解工具

有沒有研究過函式自動分解工具

2020-09-14 20:58:28 軟體工程

有沒有研究過函式自動分解工具?把一個編程工程中的多個模塊中的每一個程序函式用代碼“分解”提取出來,把表單,模塊也分解出來。
目標就像是做一個把手機電路板的CPU,記憶體螢屏等自動拆解的智能機器人。
把編程的基礎元素提練出來,然后做高度整合,提高代碼復用率,表單,模塊做到一次撰寫永久使用的目的,達到1+1=2,2+2=4,100次之后那將是無窮大了。1+1+1+**,100次也只有100.如果你的工資這個月1萬,下個月2萬,那****

uj5u.com熱心網友回復:

英語中有一句諺語叫做No Silver Bullet,有一本書就叫這個,翻譯成中文叫做《沒有銀彈》
這個“銀彈”可以指很多東西,包括lz說的這個。

uj5u.com熱心網友回復:

你拆一堆廢舊iphone5,這些零件可以組合出一臺可以用的iphone5。
你拆一堆廢舊的note2,這些零件可以組合出一臺可以用的note2。
你把iPhone4和note2的零件堆在一起,你除了iphone5和note2之外并不能拼出新的機型。因為他們內部的介面、孔洞、尺寸都不是標準化的。除了自己的那一堆,和別家的不兼容,除非你對這些模塊進行修改。當然,并不排除有些相同的芯片可以互換使用,因為他們的輸入輸出相同、內部邏輯相同、外形尺寸相同……
我們的程式也一樣,你把你的函式原原本本的拷貝到別的工程里面立馬能用?除了一些標準的公共函式、API之類的可以替換,但是芯片可能壞了替換一下,代碼除非函式版本不同,要不然有啥好替換的。

uj5u.com熱心網友回復:

拆IPHONE5不能用于IHPONE8,這就像是VB6的代碼不能用于VB.NET。
但是VB6相當于IPHONE5,所有的代碼可以互換。而且這個產品20幾年了一直活著。
當然也可以直接就上升到VB.NET,原理是一樣的。
寫一個代碼分析工具,把模塊拆解,再拆解函式,最后每一行的變數,字串全能識別出來。
就是想弄一個代碼工具,把一些網上下載的工程進行拆解,把有用的函式用起來,不過一般情況下,手工復制出來也夠用了。
想省點事

uj5u.com熱心網友回復:

比如下面的函式,怎么拆解出來分析。
函式型別:SUB還是FUNCTION
有幾個引數,每個引數型別,是否有默認值,函式用了幾個變數
把函式整理成標準寫法格式,把所有的變數定義放在函式最前面。
怎么寫個代碼實作這個功能?

    Private _
Function jia2(a As Long, _
ByVal b As Integer) As Long '加法  函式
    jia = a + b: Dim k    As Long: k = 3
Dim S: S = "中國人  " '88382':"
End _
Function

uj5u.com熱心網友回復:

把dim提前,給你寫了一段試試看。
后來覺得只是提前太沒有意思了,把格式化縮進也給你做了個樣例。只是個例子,里面的關鍵字列得不全,需要的話自己再加。
假設你輸入的都是function 或者sub哈,其他的你自己添加代碼。
至于提取引數個數,懶得寫代碼了,就是第一行取()中間的部分用逗號split一下,再去逐個分析就了事了。



Option Explicit

Private Sub Command1_Click()
Dim strTest As String
strTest = strTest & "    Private _" & vbCrLf
strTest = strTest & "Function jia2(a As Long, _" & vbCrLf
strTest = strTest & "ByVal b As Integer) As Long '加法  函式" & vbCrLf
strTest = strTest & "    jia = a + b: Dim k    As Long: k = 3" & vbCrLf
strTest = strTest & "Dim S: S = ""中國人  "" '88382':" & vbCrLf
strTest = strTest & "if 1=1 then" & vbCrLf
strTest = strTest & "for i = 1 to 100" & vbCrLf
strTest = strTest & "doevents:debug.print i " & vbCrLf
strTest = strTest & "next " & vbCrLf
strTest = strTest & "elseif 1=2 then " & vbCrLf
strTest = strTest & "doevents:debug.print i " & vbCrLf
strTest = strTest & "else " & vbCrLf
strTest = strTest & "doevents:debug.print i " & vbCrLf
strTest = strTest & "end if " & vbCrLf
strTest = strTest & "End _" & vbCrLf
strTest = strTest & "Function"

Debug.Print strTest
Debug.Print vbCrLf & "分隔線---------------------------" & vbCrLf
Debug.Print formatVBcode(strTest)
End Sub
Private Function formatVBcode(ByVal strin As String) As String

    Dim strTmp As String
    Dim aryTmp() As String
    Dim colcode As New Collection
    Dim i As Long, j As Long
    Dim lngDimRow As Long, lngTabCnt As Long
    Dim strTab As String
    '去他媽的所有換行連接
    strTmp = Replace(strin, " _" & vbCrLf, " ")
    '去他媽的冒號并行,當然這邊可能把字串里面的冒號也折行了,自己改進一下吧。
    strTmp = Replace(strTmp, ":", vbCrLf)
    '按行拆分
    aryTmp = Split(strTmp, vbCrLf)
    '去空行,去前后空格,然后塞進我個人喜歡的集合
    For i = LBound(aryTmp) To UBound(aryTmp)
        If aryTmp(i) <> "" Then
            colcode.Add Trim(aryTmp(i))
        End If
    Next
    
    lngDimRow = 2
    
    
    For i = 2 To colcode.Count - 1 '第一行和第二行懶得處理了,
        If GetKeyWord(colcode(i)) = "DIM" Then '遇到dim,加挪到最前面去
            colcode.Add colcode(i), , lngDimRow
            colcode.Remove i + 1
        End If
    Next
    
    '添加縮進,輸出
    lngTabCnt = 1
    formatVBcode = formatVBcode & Trim(colcode(1)) & vbCrLf
    For i = 2 To colcode.Count - 1 '第一行和第二行懶得處理了,
        strTab = Replace(Space(lngTabCnt * 4), "    ", vbTab) '需要縮進的tab
        If GetKeyWord(colcode(i)) = "IF" Or GetKeyWord(colcode(i)) = "FOR" Then '遇到 if 和 for 則后續的行家一格縮進 當然,還有其他關鍵字,自己添加,懶得寫了
            formatVBcode = formatVBcode & strTab & colcode(i) & vbCrLf '本行加上縮進
            lngTabCnt = lngTabCnt + 1
        ElseIf GetKeyWord(colcode(i)) = "NEXT" Or GetKeyWord(colcode(i)) = "END" Then '本行及后續向前一格
            lngTabCnt = lngTabCnt - 1
            strTab = Replace(Space(lngTabCnt * 4), "    ", vbTab)
            formatVBcode = formatVBcode & strTab & colcode(i) & vbCrLf
        ElseIf GetKeyWord(colcode(i)) = "ELSEIF" Or GetKeyWord(colcode(i)) = "ELSE" Then '本行及后續縮進不變
            strTab = Replace(Space((lngTabCnt - 1) * 4), "    ", vbTab)
            formatVBcode = formatVBcode & strTab & colcode(i) & vbCrLf
        Else
            formatVBcode = formatVBcode & strTab & colcode(i) & vbCrLf
        End If
    Next
    formatVBcode = formatVBcode & Trim(colcode(colcode.Count - 1))
    
End Function

Private Function GetKeyWord(strin As String)
    Dim i As Integer
    i = InStr(1, strin, " ")
    If i > 1 Then
        GetKeyWord = UCase(Left(strin, InStr(1, strin, " ") - 1))
    Else
        GetKeyWord = UCase(strin)
    End If
End Function

uj5u.com熱心網友回復:

參考 6 樓 脆皮大雪糕 的回復:
把dim提前,給你寫了一段試試看。
后來覺得只是提前太沒有意思了,把格式化縮進也給你做了個樣例。只是個例子,里面的關鍵字列得不全,需要的話自己再加。
假設你輸入的都是function 或者sub哈,其他的你自己添加代碼。
至于提取引數個數,懶得寫代碼了,就是第一行取()中間的部分用逗號split一下,再去逐個分析就了事了。

----
'去他媽的所有換行連接
    strTmp = Replace(strin, " _" & vbCrLf, " ")
    '去他媽的冒號并行,當然這邊可能把字串里面的冒號也折行了,自己改進一下吧
-------------
最難處理的就是換行連接符,如果他在注釋中咋弄?就會有幾行注釋。
另外我主要的難點不是代碼縮進。
本意是想直接在原來亂亂的格式下進行代碼決議:提取函式名,私有還是公用,有幾個引數,函式的型別是什么。(重點就是處理前面一行)
另外如果可行,能夠替換里面的內置函式或自定函式的呼叫就更強了。
主要是用于如果想升級工程,替換下一些舊函式,引數可能增加了,也可能變換了引數順序(原來引數3變成了“引數1”)
當然這就不是簡單的替換字串就能完成了。所以決議能力要比較強,我腦子短路了,不知咋實作。

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/38740.html

標籤:VB基礎類

上一篇:雙擊打開一個excel檔案時,作業薄內容的重繪程序

下一篇:關于sock連接

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more