Anonymous user
Split a character string based on change of character: Difference between revisions
Split a character string based on change of character (view source)
Revision as of 03:03, 17 March 2019
, 5 years agoAdd Jsish
(Add Jsish) |
|||
Line 820:
Using the -r ("raw output") command-line option of jq:
<pre>g, HHH, 5, YY, ++, ///, \</pre>
=={{header|Jsish}}==
Showing off a little unit testing...
Starting with
<lang javascript>#!/usr/bin/env jsish
;'Split a string based on change of character, in Jsish';
function splitOnChange(str:string):string {
if (str.length < 2) return str;
var last = str[0];
var result = last;
for (var pos = 1; pos < str.length; pos++) {
(last == str[pos]) ? result += last : result += ', ' + str[pos];
last = str[pos];
}
return result;
}
provide('splitOnChange', 1.0);
/* literal backslash needs escaping during initial processing */
;splitOnChange('gHHH5YY++///\\');
;splitOnChange('a');
;splitOnChange('ab');
;splitOnChange('aaa');
;splitOnChange('aaaba');
;splitOnChange('gH HH5YY++//,/\\');</lang>
Then
<pre>
prompt$ jsish -u -update true splitOnChange.jsi
Created splitOnChange.jsi</pre>
Giving
<lang javascript>#!/usr/bin/env jsish
;'Split a string based on change of character, in Jsish';
function splitOnChange(str:string):string {
if (str.length < 2) return str;
var last = str[0];
var result = last;
for (var pos = 1; pos < str.length; pos++) {
(last == str[pos]) ? result += last : result += ', ' + str[pos];
last = str[pos];
}
return result;
}
provide('splitOnChange', 1.0);
/* literal backslash needs escaping during initial processing */
;splitOnChange('gHHH5YY++///\\');
;splitOnChange('a');
;splitOnChange('ab');
;splitOnChange('aaa');
;splitOnChange('aaaba');
;splitOnChange('gH HH5YY++//,/\\');
/*
=!EXPECTSTART!=
'Split a string based on change of character, in Jsish'
splitOnChange('gHHH5YY++///\') ==> g, HHH, 5, YY, ++, ///, \
splitOnChange('a') ==> a
splitOnChange('ab') ==> a, b
splitOnChange('aaa') ==> aaa
splitOnChange('aaaba') ==> aaa, b, a
splitOnChange('gH HH5YY++//,/\') ==> g, H, , HH, 5, YY, ++, //, ,, /, \
=!EXPECTEND!=
*/</lang>
Which tests as:
<pre>prompt$ jsish -u splitOnChange.jsi
[PASS] splitOnChange.jsi</pre>
And then satisfying the task of showing the one result, using the script as a module:
{{out}}
<pre>prompt$ jsish
Jsish interactive: see 'help [cmd]'. \ cancels > input. ctrl-c aborts running script.
# require('splitOnChange');
1
# puts(splitOnChange('gHHH5YY++///\\'));
g, HHH, 5, YY, ++, ///, \</pre>
=={{header|Julia}}==
|