<div dir="ltr"><div class="gmail_default" style="font-size:small">You could use my methods that never get accepted.  I use them all the time!</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">Collection >> explode: aDelimiter</div> <span class="gmail_default" style="font-size:small">     </span>"explode the collection into a collection of collections broken by aDelimiter"<br>   <span class="gmail_default" style="font-size:small">     </span>"(#(#(1 2) #(3 4)) mergeDelimited: Character tab ) explode: Character tab = an OrderedCollection(#(1 2) #(3 4))<br>       <span class="gmail_default" style="font-size:small">     </span>'abcdef' explode: 'cd' = an OrderedCollection('ab' 'ef')"<br>     <span class="gmail_default" style="font-size:small">     </span>| resultCollection starting aDelimiterPosition aDelimiterSize |<br>    <span class="gmail_default" style="font-size:small">     </span>self ifEmpty: [^self].<br>     <span class="gmail_default" style="font-size:small">     </span>resultCollection := OrderedCollection new.<br> <span class="gmail_default" style="font-size:small">     </span>aDelimiterSize := aDelimiter isCollection ifTrue: [aDelimiter size] ifFalse: [1].<br>  <span class="gmail_default" style="font-size:small">     </span>starting := 1.<br>     <span class="gmail_default" style="font-size:small">     </span>[aDelimiterPosition := aDelimiter isCollection ifTrue: [self indexOfSubCollection: aDelimiter startingAt: starting] ifFalse: [self indexOf: aDelimiter startingAt: starting ifAbsent: [0]].<br>        <span class="gmail_default" style="font-size:small">     </span>aDelimiterPosition > 0] whileTrue: [<br>            <span class="gmail_default" style="font-size:small">          </span>resultCollection add: (self copyFrom: starting to: aDelimiterPosition - 1).<br>         <span class="gmail_default" style="font-size:small">          </span>starting := aDelimiterPosition + aDelimiterSize.<br>    <span class="gmail_default" style="font-size:small">     </span>].<br> <span class="gmail_default" style="font-size:small">     </span>resultCollection add: (self copyFrom: starting to: self size).<br>     <span class="gmail_default" style="font-size:small">     </span>^resultCollection<div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">Collection >> mergeDelimited: anObject<br>     "return to receiver a collection with each element concatenated to remove embedded collections"<br>     "#(#(1 2) #(3 4)) mergeDelimited: Character tab = #(1 2 Character tab 3 4),  #('ab' 'cd') mergeDelimited: Character cr = 'ab<br>     cd' "<br>     | returnCollection aSeperator |<br>     self ifEmpty: [^self].<br>     aSeperator := anObject isCollection ifTrue: [anObject] ifFalse: [Array with: anObject].  <br>     returnCollection := self first species new.<br>     self copy from: 1 to: self size -1 do: [:a |<br>          a ifNotNil: [<br>               returnCollection := returnCollection, a, aSeperator<br>          ].<br>     ].<br>     ^returnCollection, self last<br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">' Middle-left-cell || style="width: 14em;" | Middle-center-cell || Middle-right-cell' explode: $| </div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">an OrderedCollection(</div><div class="gmail_default" style="font-size:small">' Middle-left-cell ' </div><div class="gmail_default" style="font-size:small">'' </div><div class="gmail_default" style="font-size:small">' style="width: 14em;" ' </div><div class="gmail_default" style="font-size:small">' Middle-center-cell ' </div><div class="gmail_default" style="font-size:small">'' </div><div class="gmail_default" style="font-size:small">' Middle-right-cell')<br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">All the best,</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">Ron Teitelbaum</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Oct 24, 2019 at 11:38 AM gettimothy via Squeak-dev <<a href="mailto:squeak-dev@lists.squeakfoundation.org">squeak-dev@lists.squeakfoundation.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u><div><div style="font-family:Verdana,Arial,Helvetica,sans-serif;font-size:10pt"><div>Hi all.<br></div><div><br></div><blockquote style="border:1px solid rgb(204,204,204);padding:7px;background-color:rgb(245,245,245)"><div><div>' Middle-left-cell || style="width: 14em;" | Middle-center-cell || Middle-right-cell' self subStrings:'|'<br></div><div>' Middle-left-cell || style="width: 14em;" | Middle-center-cell || Middle-right-cell' self subStrings:'||'<br></div></div></blockquote><div>inspect both, they are identical.<br></div><div><br></div><div>Is this expected behavior?<br></div><div><br></div><div>Looking at the method:<blockquote style="border:1px solid rgb(204,204,204);padding:7px;background-color:rgb(245,245,245)"><div>char := sourceStream next.<br></div></blockquote><br></div><div>is the "problem" in that a match is had for the single pipe character.<br></div><div><br></div><div>Is there a better way to split that string along double pipes '||'  ?<br></div><div><br></div><div>thank you in advance.</div><div><br></div><div><br></div><div><br></div></div><br></div><br>
</blockquote></div>