2011-03-04 75 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

相关问题