[問題] 修改文字檔txt

看板C_Sharp (C#)作者 (全世界的暱稱都被取光了)時間5年前 (2019/10/04 11:34), 編輯推噓0(0033)
留言33則, 5人參與, 5年前最新討論串1/1
請教一下我有個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”); 請問如果要修改的話怎麼做 謝謝各位大大 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.219.141.41 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1570160072.A.52F.html

10/04 11:36, 5年前 , 1F
感覺用excel就可以完成了?
10/04 11:36, 1F

10/04 14:41, 5年前 , 2F
要先搞懂格式空格的規則吧
10/04 14:41, 2F

10/04 16:33, 5年前 , 3F
那請問如果知道空白的規則,要如何修改呢?
10/04 16:33, 3F

10/04 17:06, 5年前 , 4F
逐行讀檔→切割欄位→找到目標儲存格→修改值→存檔
10/04 17:06, 4F

10/04 22:44, 5年前 , 5F
10/04 22:44, 5F

10/05 08:37, 5年前 , 6F
剛剛又做了點修改,現在若
10/05 08:37, 6F

10/05 08:37, 5年前 , 7F
1.資料內容剛好出現8位數的數值(類似日期格式)不會轉換
10/05 08:37, 7F

10/05 08:37, 5年前 , 8F
2.最後一筆資料結尾不管有無斷行符號,都可被正確轉換
10/05 08:37, 8F

10/05 13:00, 5年前 , 9F
太感謝了我先來試試看
10/05 13:00, 9F

10/05 14:39, 5年前 , 10F
結果可以成功謝謝,那在請問一下,我剛剛在想如果我用一
10/05 14:39, 10F

10/05 14:39, 5年前 , 11F
個text box 輸入日期,是不是也可用這個方法把文字檔中的
10/05 14:39, 11F

10/05 14:39, 5年前 , 12F
日期替換成我想要的日期
10/05 14:39, 12F

10/05 15:46, 5年前 , 13F
可以,但要注意這會將所有資料都替換為同一個輸入字串
10/05 15:46, 13F

10/05 15:47, 5年前 , 14F
我更新在範例裡了,請參考執行結果
10/05 15:47, 14F

10/05 17:51, 5年前 , 15F
@samchung 請問一下是如何排除資料中有相同的8位數值類似
10/05 17:51, 15F

10/05 17:51, 5年前 , 16F
日期,原理是什麼呢?剛剛試完都可以順利完成太厲害了
10/05 17:51, 16F

10/05 19:43, 5年前 , 17F
關鍵在正規表達式用來比對的 pattern 結尾部份
10/05 19:43, 17F

10/05 19:44, 5年前 , 18F
(?'END'[\s]{0,1})$ 補充說明如下
10/05 19:44, 18F

10/05 19:44, 5年前 , 19F
因為有設定 RegexOptions.Multiline
10/05 19:44, 19F

10/05 19:44, 5年前 , 20F
所以在每一行比對時可用 ^ 表示行開頭,$ 表示行結尾
10/05 19:44, 20F

10/05 19:44, 5年前 , 21F
() 表示將符合裡面所寫條件的字串群組化起來之後使用
10/05 19:44, 21F

10/05 19:44, 5年前 , 22F
?'END' 表示給這個群組命名為 END 之後可 ${END} 取用
10/05 19:44, 22F

10/05 19:44, 5年前 , 23F
[\s] 表示要出現 \n \r \t \f 或空白任意 "一個"
10/05 19:44, 23F

10/05 19:44, 5年前 , 24F
{0,1} 表示前面那個 [\s] 連續出現最少 0 個,最多 1 個
10/05 19:44, 24F

10/05 19:45, 5年前 , 25F
好啦,將上面整段放在 pattern 結尾表示
10/05 19:45, 25F

10/05 19:45, 5年前 , 26F
日期的8碼數字必須出現在每行的結尾才符合條件,
10/05 19:45, 26F

10/05 19:45, 5年前 , 27F
若是每行非結尾處的8碼數字就不符合條件
10/05 19:45, 27F

10/05 20:18, 5年前 , 28F
@samchung 原來是這樣,謝謝大大的解說學習到了,獲益匪
10/05 20:18, 28F

10/05 20:18, 5年前 , 29F
淺!
10/05 20:18, 29F

10/05 22:01, 5年前 , 30F
正規表達法向來是神的領域,每次看都跟天書一樣QQ
10/05 22:01, 30F

10/09 12:47, 5年前 , 31F
@samchung 請問一個衍生的問題~
10/09 12:47, 31F

10/09 12:47, 5年前 , 32F
被取代的日期後可以往前移4個空格嗎?
10/09 12:47, 32F

10/10 11:47, 5年前 , 33F
10/10 11:47, 33F
文章代碼(AID): #1Tbht8Kl (C_Sharp)
文章代碼(AID): #1Tbht8Kl (C_Sharp)