作者t78923t (...)
看板java
標題[問題] 檔案讀取特定區塊內容
時間Sun Jul 25 11:10:46 2021
我有一個檔案內容部分格式大概像這樣:
text1: abc
text2: 1234
block1:
line1: 123456
line2: abcd
line3: abc/123
block2:
line1: aabbcc
line2: 0123456
line3: 123123
檔案內容有其他人會寫檔 所以每個區塊的內容及行數會變
但是每個區塊內的tag名稱不變 有時候某些tag那一列會不見
如果我想讀出特定的區塊及他的內容 像是指定block1
就讀出block1底下的line1~3的所有內容
請問有比較好的做法嗎?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 150.117.35.4 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1627182650.A.517.html
※ 編輯: t78923t (150.117.35.4 臺灣), 07/25/2021 11:11:56
1F:推 jej: 正則表示法 07/25 11:59
2F:推 g30601: 把全部block當篩選條件 每行判斷,遇到就往下讀三行 07/25 21:50
3F:→ g30601: 如果block會不見的話,建議先找找不見的原因為何 07/25 21:50
4F:→ g30601: 或加入其他判斷條件 07/25 21:50
這可能不太行 因為內容會變 不是每次都是三行
5F:→ ssccg: 你的檔案是純文字檔? 縮排是真的這樣? text、block、line有 07/26 11:04
6F:→ ssccg: 固定格式? 檔案大小? 你現在的作法和你覺得有問題的點? 07/26 11:05
7F:→ ssccg: 解法可以包含改檔案格式? 覺得你的問題不是很清楚 07/26 11:05
8F:推 kentyeh: 你的block的level是不是應該與text的level相同?如果是那 07/26 12:01
9F:→ kentyeh: 格式就是yaml,有現成的liberary可以處理 07/26 12:01
不是同level 不過是yaml沒錯 其實原本要用snakeyaml套件去讀寫
但我的maven 打包這套件一直包不進去 有想過能不能轉成json
讓我能直接用tag取裡面的值但沒找到yaml轉json的相關做法
只好先當作一般文字檔來讀
※ 編輯: t78923t (150.117.35.4 臺灣), 07/26/2021 20:05:40
※ 編輯: t78923t (150.117.35.4 臺灣), 07/26/2021 20:16:21
10F:→ ssccg: 是yaml就直說啊... 比較好的方法不就是把你打包問題修好. 07/26 20:27
有試過 但一直修不好 目前是在IDE上跑可以 打包後執行就會找不到套件...
時間有限 只好先換方法做了
※ 編輯: t78923t (150.117.35.4 臺灣), 07/26/2021 21:23:31
11F:→ bitlife: 用有限狀態機的模式下去寫,讀到一行判斷next state,視情 07/27 11:37
12F:→ bitlife: 況決定需要幾行look ahead,把讀進來的look ahead未使用時 07/27 11:38
13F:→ bitlife: 塞入陣列buffer,主程式要讀取一行去一個專用函式要,該專 07/27 11:39
14F:→ bitlife: 用函式先從look ahead buffer抓,沒東西才讀檔 07/27 11:39
15F:→ bitlife: IDE找得到,通常是先用到IDE內部的lib了,解決這點搞不好更 07/27 11:41
16F:→ bitlife: 省時 07/27 11:41
17F:推 internetms52: 早晚要解決打包問題的,畢竟不是什麼都有辦法自己 08/02 13:29
18F:→ internetms52: 寫,可執行jar檔的包法有點不一樣,印象中maven官 08/02 13:29
19F:→ internetms52: 網有範例 08/02 13:29