Split a character string based on change of character: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 2,396: | Line 2,396: | ||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
g, HHH, 5, YY, ++, ///, \ |
|||
</pre> |
|||
=={{header|SNOBOL4}}== |
|||
{{works with|SNOBOL4, SPITBOL for Linux}} |
|||
<lang SNOBOL4> |
|||
* Program: split_on_change_of_character.sbl |
|||
* To run: sbl split_on_change_of_character.sbl |
|||
* Description: Split a (character) string into comma (plus a blank) |
|||
* delimited strings based on a change of character (left to right). |
|||
* |
|||
* Blanks should be treated as any other character |
|||
* (except they are problematic to display clearly). |
|||
* The same applies to commas. |
|||
* |
|||
* For instance, the string: |
|||
* |
|||
* gHHH5YY++///\ |
|||
* should be split and show: |
|||
* |
|||
* g, HHH, 5, YY, ++, ///, \ |
|||
* Comment: Tested using the Spitbol for Linux version of SNOBOL4 |
|||
lf = substr(&alphabet,11,1) ;* New line or line feed |
|||
* Function split_cc will split a string on a change of character. |
|||
define('split_cc(s)tchar,target,post') |
|||
:(split_cc_end) |
|||
split_cc |
|||
tchar = substr(s,1,1) :f(freturn) |
|||
split_cc_pat = span(*tchar) . target (rpos(0) | len(1) . tchar rem) . post |
|||
split_cc2 |
|||
s ? split_cc_pat = post :f(split_cc3) |
|||
split_cc = (ident(split_cc) target, split_cc ', ' target) :s(split_cc2) |
|||
split_cc3 |
|||
:(return) |
|||
split_cc_end |
|||
test_string = "gHHH5YY++///\" |
|||
output = test_string lf |
|||
split_string = split_cc(test_string) |
|||
output = split_string |
|||
END</lang> |
|||
{{out}} |
|||
<pre> |
|||
gHHH5YY++///\ |
|||
g, HHH, 5, YY, ++, ///, \ |
g, HHH, 5, YY, ++, ///, \ |
||
</pre> |
</pre> |