iT邦幫忙

2026 iThome 鐵人賽

DAY 21
0
佛心分享-IT 人自學之術

《拒絕爆肝加班!30天打通跨系統自動化與資料比對防線》系列 第 21

Day 21:ABC123 數據清洗:Pagination 與 Buffer 管理挑戰

  • 分享至 

  • xImage
  •  

哥!您來了!快請坐,小晴給您奉茶!今天小晴不只騎著機車在外頂著大太陽奔波,腦子裡想的也全都是要幫您鎖定最珍貴、含金量最高的「神級物件」!

今天,我們要看的這個「技術建案」非常不得了,它座落在最穩固、資歷最深的老字號精華區——Day 21:ABC123 數據清洗:Pagination 與 Buffer 管理挑戰

哥,想像一下,今天我們要進行一項超大型的都更計劃,要把整排不規則、隔間雜亂的「老舊透天厝(IBM 3270 綠色終端多頁面不規則資料)」全部買下來。如果我們每買下一間就重新簽一次獨立契約(普通的 Copy 覆蓋),這樣一頁頁零碎地登記(產出多個破碎檔案),那我們代書和地政事務所(系統硬體與記憶體流程)遲早要崩潰!

小晴幫您研究出來的最完美策略,就是「在第一間用主約(Copy)鎖定,接下來整排的鄰近產權,直接用『附加特約(Copy Add)』」,一口氣把整條街的產權(記憶體 Buffer)全綁在一起!再交給我們最專業的「金牌空間規劃師——ABC123 資料整理工具」,把所有老舊隔間(分頁表頭與格式雜訊)通通拆除打通,重新蓋成一棟結構最安全、格局最方正、最抗震的「結構化高樓清單」!

這套「黃金合規好宅」的底層精髓與施工細節,小晴現在就為您詳細導覽!


一、 核心技術痛點:IBM 終端不規則文字與分頁限制

在面對大型主機(Mainframe,如 IBM 3270 / AS400)的運作時,資訊人員最常遇到的就是這類「不規則文字流」的都更難題:

  1. 綠色螢幕的「分頁限制(Pagination Limit)」
    大型主機的終端模擬器(Emulator)受限於傳統螢幕解析度,畫面通常採用固定的 24 行乘 80 列(24x80)字元視窗。當我們在系統中查詢如 ABC123 這類龐大的基金明細或帳務數據時,資料會被迫切割成無數張「綠色螢幕分頁」。
  2. 表頭雜訊反覆疊加
    每一頁螢幕的頂部和底部,都會夾帶大量與業務資料無關的系統雜訊。例如:系統代碼、報表執行日期、操作人員識別、分頁頁次(Page 01, Page 02...)以及對齊用的分隔線(----====)。如果直接將這些內容全部丟進資料庫,資料庫絕對會因為讀不懂非結構化文字而直接當機!
  3. 剪貼簿的「覆蓋悲劇(Buffer Overwriting)」
    如果我們對每一頁都執行常規的 Ctrl+C 複製,Windows 的剪貼簿 Buffer(緩衝區)在複製下一頁時,就會無情地把上一頁的資料直接蓋掉。要是一頁一頁複製到記事本存檔,再手動清洗,那業務人員的手指可能先貼到發炎。這在合規對帳上是效率極低、極易遺漏的技術黑洞。

二、 底層 Buffer 管理策略:Copy 與 Copy Add 的黃金藝術

為了打通這個資料傳輸的任督二脈,工具在終端模擬器的 Buffer 管理上,採用了極具智慧的 「一主多從(Copy & Copy Add)」追加緩衝區管理策略

[第一頁資料]  ──> 執行「Copy (複製)」 ──> 初始化並覆蓋舊的 Clipboard Buffer
                                                │
[第二頁資料]  ──> 執行「Copy Add (複製新增)」 ──> 追加至 Buffer 尾端
                                                │
[第三頁資料]  ──> 執行「Copy Add (複製新增)」 ──> 追加至 Buffer 尾端
                                                ▼
                                    [ 完整合併的不規則數據流 ]
                                                │ (一鍵匯入清洗)
                                                ▼
                                    [ 乾淨、結構化的表格清單 ]

1. 第一頁:Copy(複製)——「立主約,清空舊產權」

當使用者查詢到 ABC123 資料的第一頁時,首先執行 「Copy」 功能。
這個動作在底層會驅動系統呼叫作業系統的剪貼簿 API,將剪貼簿中先前殘留的其他髒數據(Dirty Data)徹底清空,並把第一頁的 24x80 字元文字塊作為緩衝區的起點(Baseline)。

2. 後續頁面:Copy Add(複製新增)——「簽增約,產權整併」

當使用者按下 PageDown 鍵翻頁到下一頁時,不再使用普通的複製,而是使用終端模擬器專屬的 「Copy Add」(複製新增/追加複製)功能。

  • 底層邏輯:該功能不會覆蓋剪貼簿現有的內容,而是將目前新分頁的 24x80 字元資料,以文字串接(String Concatenation)的方式,追加(Append) 到現有剪貼簿的尾端。
  • 效果:無論資料有 10 頁還是 100 頁,在經歷了一次「Copy」與數十次「Copy Add」後,剪貼簿的 Buffer 中將成功鎖定一整條不規則但「連續」的文字巨獸,不再需要產出任何暫存的文字檔!

三、 實務案例:以「ABC123 資料整理工具」為核心的操作與清洗流

「交給我您放心!」這套工具的操作流程設計得極度防呆且流暢,只需四個簡單步驟,就能完成這項數據清洗的都更工程:

  1. 終端資料採集
    登入基金系統,查詢所需的 ABC123 帳務資料。在第一頁請點選終端模擬器的 「複製 (Copy)」 功能,隨後向下翻頁,之後的每一頁請點選 「複製新增 (Copy Add)」 功能,直到最後一頁。
  2. 啟動清洗引擎
    開啟我們這間精心設計的 ABC123資料整理工具.xlsm
  3. 清空並貼上暫存區
    在工具的控制面板上點選 【貼上清除區】 按鈕。這個動作會由 VBA 巨集自動清空 Excel 工作表中專屬的「原始貼上區(Staging Sheet)」,並自動將剛才透過「Copy + Copy Add」合併在剪貼簿中的海量、不規則文字串一鍵貼上。
  4. 結構化清洗輸出
    點選 【取得ABC123清單】。工具的底層解析引擎會瞬間啟動,自動掃描並移除所有頁首、頁尾、分頁符號及空白線,將殘缺的綠色螢幕文字逐行剖析、對齊,最後產出一張欄位分明(如基金代號、身分證號、交易金額等)的結構化清單

四、 解決方案與關鍵技術實作思路 (IT 工程師專屬)

哥,如果您要在系統後台(例如使用 Python 或 Excel VBA)優化或重寫這套數據清洗引擎,小晴特別幫您整理了最頂級的「結構規劃與施工指南」:

1. 固定寬度剖析(Fixed-Width Slicing)

由於 IBM 主機終端資料沒有逗號或 Tab 作為欄位分隔符,因此必須採用「字元索引切片」技術。例如,確定每行字串中:

  • 06 個字元是「基金代碼」
  • 717 個字元是「客戶識別碼」
  • 1830 個字元是「交易餘額」

2. 狀態機過濾演算法(State-Machine Filtering)與 RegEx

在遍歷每一行文字時,程式必須動態判斷該行是「有效資料」還是「分頁表頭垃圾」。我們可以用 Python 寫出一段超高效率的清洗邏輯:

import re
import pandas as pd

def parse_ABC123_buffer(raw_buffer_text: str) -> pd.DataFrame:
    """
    解析來自 Copy 與 Copy Add 合併後的 ABC123 原始字元串流
    """
    lines = raw_buffer_text.split('\n')
    cleaned_records = []
    
    # 建立過濾不規則表頭與系統雜訊的正規表達式 (RegEx)
    noise_patterns = [
        re.compile(r'ABC123', re.IGNORECASE), # 系統交易代碼
        re.compile(r'PAGE|頁次|頁別', re.IGNORECASE), # 頁碼標籤
        re.compile(r'DATE|日期|時間', re.IGNORECASE), # 列印時間
        re.compile(r'^[-=\s]*$'), # 全由破折號、等號或空白組成的雜訊線
    ]
    
    for line in lines:
        # 去除前後多餘空白
        stripped_line = line.strip()
        
        # 防呆機制:若為空行或匹配到表頭雜訊,直接過濾跳過
        if not stripped_line or any(pattern.search(stripped_line) for pattern in noise_patterns):
            continue
            
        # 實施固定寬度剖析 (依照 ABC123 的標準欄位格局)
        # 假設標準資料行長度必須大於 30 個字元
        if len(line) >= 30:
            fund_code = line[0:6].strip()       # 基金代碼 (6碼)
            customer_id = line[7:17].strip()    # 客戶 ID / 統編 (10碼)
            balance = line[18:30].strip()       # 餘額 / 金額 (12碼)
            status = line[31:35].strip() if len(line) > 31 else "" # 狀態 (4碼)
            
            # 確保提取出來的核心主鍵欄位 (如基金代碼與客戶ID) 格式正確,避免塞入碎屑
            if fund_code.isalnum() and customer_id:
                cleaned_records.append({
                    "基金代碼": fund_code,
                    "客戶身分證號": customer_id,
                    "帳戶餘額": balance,
                    "狀態註記": status
                })
                
    # 轉換成乾淨的 DataFrame 結構
    return pd.DataFrame(cleaned_records)

這樣一來,不管前台業務人員 Copy Add 了多少頁、疊加了多少分頁表頭,這套底層引擎都能像碎紙機一樣,只留下最純淨的黃金資料,自動將它們完美歸建!


哥,您看!這套「ABC123 資料整理工具」的都更清洗技術,是不是既實用又非常有格局?簡直就是把老透天厝蓋成超級豪宅的魔術!
簡報


上一篇
Day 20:FATCA 合規對帳:跨系統會計科目交叉檢驗
下一篇
Day 22:交易檔匯總與 CSV 聚合:記憶體優化與動態命名
系列文
《拒絕爆肝加班!30天打通跨系統自動化與資料比對防線》25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言