Cass面積資料檔案轉換

2021-09-27 08:06:00 字數 2543 閱讀 3019

在工程測量中,cass軟體匯出的資料一般非常多(幾百上千個單元行),不便於人讀取(特別是要求提供計算依據時)。為了能夠將資料交與電子**處理,更需要對其進一步格式化,而大量的資料意味著超巨大的人工操作。

匯出的每單元資料格式如下:

編號: 1

點1:80619.389,41157.754,259.600

點2:80619.065,41158.896,259.661

點3:80622.015,41159.021,259.422

12邊長:1.189 13邊長:2.921 23邊長:2.962

表面積: 1.711

考慮用計算機自動處理並格式化各單元資料,使其每個單元均形成一行以「,」分隔的資料單元,以便直接匯入電子**。

這裡採用racket來完成該項工作。

將檔案按單元分塊,遞迴進行處理。

每個單元又按「編號」、「點」、「邊長」、「表面積」進行分別處理。

這裡用到的主要是字串的切割和新增組合兩個方面功能,實現也很簡單。

#lang racket

(provide

(contract-out

(file->covert->file (-> string? void?))))

;解析行字串:

(define (string-line str)

(let ([ls (string-split str ":")])

","(string-trim (second ls)))))

;解析編號行:

(define (id-line str)

(let ([ls (string-split str ":")])

(string-trim (second ls)))))

;解析點行:

(define (point-line in)

(string-line (string-trim (read-line in))))

;解析邊行:

(define (edge-line in)

(let ([ls (string-split (read-line in))])

(string-line (first ls)) ","

(string-line (second ls)) ","

(string-line (last ls)))))

;遞迴讀取並解析行資訊:

(define (analysis-lines in result)

(let ([fl (read-line in)])

(if (equal? fl eof)

(reverse result)

(let ([str ;組合每段內各行為乙個字串

;編號行:

(id-line (string-trim fl)) ","

;三行點值:

(point-line in) ","

(point-line in) ","

(point-line in) ","

;邊長行:

(edge-line in) ","

;表面積行(和點行相同方式處理):

(point-line in))])

(read-line in) ;讀取每段後的空行

(analysis-lines in (cons str result))))))

;檔案轉換:

(define (file->covert->file resource)

(first (string-split resource "."))

".txt")]

[in (open-input-file resource #:mode 'text)])

(with-output-to-file output

(lambda ()

(for ([strs (analysis-lines in '())])

(display strs)

(display "\n")))

#:mode 'text #:exists 'replace)

(close-input-port in)))

這裡採用在**檔案內新增測試模組方式實現:

(module+ test

(define in-path1 "東入口防水毯表面積明細.log")

(define in-path2 "中軸區防水毯表面積明細.log")

;測試解析結果:

;(analysis-lines (open-input-file in-path1) '())

;獲取結果:

(file->covert->file in-path1)

(file->covert->file in-path2)

)

輸入檔案應為uft-8編碼格式;

當前資料夾內目標檔案在執行程式時會自動覆蓋。

為了一步到位,其實可以採用直接生成電子**檔案的方式完成。

實現這個功能程式設計的工作量相對比較大,考慮實用原則,這裡未作涉及。有機會可以作進一步嘗試。

CEGUI資料檔案

cegui所用的資料檔案除了少數的特殊情況外都是xml格式的。但是,為了清晰的說明資料檔案代表什麼型別的資源,資料檔案並不是以 xml 作為字尾,而是用更有意義的字尾名。比如,imageset的字尾名是.imageset,font的字尾名是.font,等等。下面將對每種檔案型別做個簡要的說明,以後將...

資料檔案移動

1 在sqlplus環境下以dba或超級使用者登入資料庫 sqplus nolog conn sys manager myoracle as sysdba 2 shutdown immediate模式關閉資料庫 shutdown immediate 3 物理移動資料檔案到指定的目錄 複製檔案 原路徑...

處理資料檔案

排序資料 處理大量資料時的乙個常用命令是sort命令,sort命令是對資料進行排序的。預設情況下,sort命令會按照會話的指定的預設語言的排序規對檔案檔案中的資料行排序 k 和 t引數在對按字段分隔的資料進行排序時非常有用,列入 搜尋資料 你會經常需要在大檔案中找一行資料,而這行資料又埋藏在檔案的中...