[問題] 修改文字檔txt

作者: dn42b5 (全世界的暱稱都被取光了)   2019-10-04 11:34:30
請教一下我有個txt檔
想一次修改大批資料的日期
內容如下
A001 3747 王大文 2303 20190924
A002 3747 王大明 39482 20190924
希望修改的方式為日期前面加‘123’並且改成
月日年
修改後
A001 3747 王大文 2303 12309242019
A002 5628 王大明 39482 12309242019
因為文字檔內的空格都有規定好
請問可以不改變文字檔的格式修改嗎
我現在只會讀全部的檔
String txtdata= system.io.file.readalltext( “txt.txt”);
請問如果要修改的話怎麼做
謝謝各位大大
作者: kuangyue (YUN)   2019-10-04 11:36:00
感覺用excel就可以完成了?
作者: feobzq (0.0)   2019-10-04 14:41:00
要先搞懂格式空格的規則吧
作者: dn42b5 (全世界的暱稱都被取光了)   2019-10-04 16:33:00
那請問如果知道空白的規則,要如何修改呢?
作者: kobe8112 (小B)   2019-10-04 17:06:00
逐行讀檔→切割欄位→找到目標儲存格→修改值→存檔
作者: samchung (不是咖啡店小開XD)   2019-10-04 22:44:00
這是你要的嗎? https://dotnetfiddle.net/zJqXa9剛剛又做了點修改,現在若1.資料內容剛好出現8位數的數值(類似日期格式)不會轉換2.最後一筆資料結尾不管有無斷行符號,都可被正確轉換
作者: dn42b5 (全世界的暱稱都被取光了)   2019-10-05 13:00:00
太感謝了我先來試試看結果可以成功謝謝,那在請問一下,我剛剛在想如果我用一個text box 輸入日期,是不是也可用這個方法把文字檔中的日期替換成我想要的日期
作者: samchung (不是咖啡店小開XD)   2019-10-05 15:46:00
可以,但要注意這會將所有資料都替換為同一個輸入字串我更新在範例裡了,請參考執行結果
作者: dn42b5 (全世界的暱稱都被取光了)   2019-10-05 17:51:00
@samchung 請問一下是如何排除資料中有相同的8位數值類似日期,原理是什麼呢?剛剛試完都可以順利完成太厲害了
作者: samchung (不是咖啡店小開XD)   2019-10-05 19:43:00
關鍵在正規表達式用來比對的 pattern 結尾部份(?'END'[\s]{0,1})$ 補充說明如下因為有設定 RegexOptions.Multiline所以在每一行比對時可用 ^ 表示行開頭,$ 表示行結尾() 表示將符合裡面所寫條件的字串群組化起來之後使用?'END' 表示給這個群組命名為 END 之後可 ${END} 取用[\s] 表示要出現 \n \r \t \f 或空白任意 "一個"{0,1} 表示前面那個 [\s] 連續出現最少 0 個,最多 1 個好啦,將上面整段放在 pattern 結尾表示日期的8碼數字必須出現在每行的結尾才符合條件,若是每行非結尾處的8碼數字就不符合條件
作者: dn42b5 (全世界的暱稱都被取光了)   2019-10-05 20:18:00
@samchung 原來是這樣,謝謝大大的解說學習到了,獲益匪淺!
作者: kobe8112 (小B)   2019-10-05 22:01:00
正規表達法向來是神的領域,每次看都跟天書一樣QQ
作者: dn42b5 (全世界的暱稱都被取光了)   2019-10-09 12:47:00
@samchung 請問一個衍生的問題~被取代的日期後可以往前移4個空格嗎?
作者: samchung (不是咖啡店小開XD)   2019-10-10 11:47:00

Links booklink

Contact Us: admin [ a t ] ucptt.com