2011-03-04 77 views
6

我幾個星期前拿起J,大約在同一時間the CodeGolf.SE beta向公衆開放。任何其他的方法來模擬J中的`tr`?

在那裏使用J時經常遇到的一個問題是我的問題是重新格式化輸入和輸出以適應問題規範。所以我傾向於使用這樣的代碼:

(] ` ('_'"0)) @. (= & '-') 

這一個未經測試因各種原因(如錯誤的編輯我);意圖的含義是「將-轉換爲_」。也頻繁出現:將換行符轉換爲空格(和交換),將數字與j合併,更改括號。

這佔用了很多字符,並不便於集成到程序的其餘部分。

是否有任何其他方式來處理?最好稍短,但如果它有其他優點,我很樂意學習其他任何東西。另外,具有隱含功能正面的解決方案將會減輕很多。

回答

5

有時候違背代碼高爾夫的性質使用的庫方法,但在字符串庫,該charsub方法是非常有用的:

'_-' charsub '_123' 
-123 
    ('_-', LF, ' ') charsub '_123', LF, '_stuff' 
-123 -stuff 
+0

這都是公平的,我如果它帶有:-)是那些圖書館任何相關文檔的默認環境?我一直在尋找他們,很少發現任何有趣的東西。 – 2011-03-05 11:22:01

+0

圖書館的名單散落。你想仔細看看他們wiki上的[this](http://www.jsoftware.com/jwiki/Library)頁面。你最好的朋友仍然在打開一個圖書館腳本並查看其中的評論。嘗試'打開'字符串'。 – MPelletier 2011-03-05 15:01:21

+0

J的標準庫被記錄在[這裏](http://www.jsoftware.com/help/user/library.htm)。 – fuz 2015-01-27 00:08:49

3

rplc普遍較短簡單的替換:

'Test123' rplc 'e';'3' 
    T3st123 

修改m}很短的特殊情況:

'*' 0} 'aaaa' 
*aaa 
'*' 0 2} 'aaaa' 
*a*a 
'*&' 0 2} 'aaaa' 
*a&a 

但是很亂,當列表已經是一個動詞:

b =: 'abcbdebf' 
'L' (]g) } b 
aLcLdeLf 

其中g就要像g =: ('b' E. ]) # ('b' E. ]) * [: i. #

有很多其他的「技巧」,在個案的基礎上工作。從手動例如:

要更換小寫「a」到在僅包含「a」到「F」的字符串「F」大寫「A」 通過「F」: ('abcdef' i. y) { 'ABCDEF' 擴展前面的例子:更換小寫的「a」到 大寫「F」「A」到「F」讓其他字符不變: (('abcdef' , a.) i. y) { 'ABCDEF' , a.

1

我只處理了換行和CSV,而不是一般情況下的替換,但這是我如何處理這些。我假定Unix行結束(或行結尾用toJ固定)和最後一行換行符。輸入

  • 單線路:".{:('1 2 3',LF)(還沒有得到又用這個)
  • 矩形輸入:(".;._2) ('1 2 3',LF,'4 5 6',LF)
  • 襤褸輸入:大概 (,;._2) (<;._2)(沒有用過這個尚未要麼。)
  • 一號線,以逗號分隔:".;._1}:',',('1,2,3',LF)

這不替代tr可言,但是行尾和其他垃圾的幫助。

+1

多年來,我開發了一些關於行尾的技巧,即' - 。 CR'去掉所有的回車並只保留LF,然後從string.ijs(或者你提及'; ._ 2')中'cut'就可以很好地工作,如果你需要它們,它將會清空。 – MPelletier 2011-03-23 16:42:33

+1

另外,iso日期(YYYY-MM-DD hh:mm:ss)以ints:'「。' - :'charsub thedate'。 – MPelletier 2011-03-23 16:43:25

相關問題