<div dir="auto"><div><br><div class="gmail_extra"><br><div class="gmail_quote">Em 23 de dez de 2016 05:15, "Bo Berglund" <<a href="mailto:bo.berglund@gmail.com">bo.berglund@gmail.com</a>> escreveu:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Is there a quick way to split a string of whitespace separated values<br>
into the separate members?<br></blockquote></div></div></div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">Unir strutils</div><div dir="auto"><br></div><div dir="auto">Wordcount + extractword </div><div dir="auto"><br></div><div dir="auto">Or</div><div dir="auto"><br></div><div dir="auto">Extractsubstr in loop</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><a href="http://www.freepascal.org/docs-html/rtl/strutils/extractsubstr.html">http://www.freepascal.org/docs-html/rtl/strutils/extractsubstr.html</a><br></div><div dir="auto"><br></div><div dir="auto">Luiz</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I have to create a function to process a number of big data files<br>
where<br>
numbers are stored in lines of 4-6 values using whitespace inbetween.<br>
First I got a sample looking like this:<br>
{code}<br>
0.4167    0.3636    -14.1483    227.2260<br>
{code}<br>
Here the separators were 4 spaces so on each line I used (slDecode is<br>
a TStringList):<br>
{code}<br>
  sLine := StringReplace(sLine, '    ', #13, [rfReplaceAll]);<br>
  slDecode.Text := sLine;<br>
{code}<br>
Worked fine if a bit slow...<br>
The stringlist items are then passed to a string to float function and<br>
stored into a dynamic array.<br>
<br>
But then it failed on a file containing lines like this:<br>
{code}<br>
   0.000    0.000    7.000    0.000  29.6628<br>
{code}<br>
Here there are 3 leading spaces plus one separator is only 2 spaces<br>
wide. So I had to modify the code:<br>
{code}<br>
  sLine := Trim(sLine);<br>
  sLine := StringReplace(sLine, '    ', #13, [rfReplaceAll]);<br>
  sLine := StringReplace(sLine, '  ', #13, [rfReplaceAll]);<br>
  slDecode.Text := sLine;<br>
{code}<br>
<br>
This works in this case but now I realize I need something better,<br>
which can deal with varying number of whitespace chars inbetween<br>
numbers.<br>
The test files are very big, like half a million lines and up, so I<br>
cannot introduce a lot of code in the loop since processing time will<br>
increase.<br>
<br>
Is there any good and quick way to extract real data from a space<br>
separated list without knowing beforehand the size of the whitespace<br>
separators?<br>
<br>
I guess that my next sample problem will be a file with TAB rather<br>
than space or even mixed TAB and space...<br>
<font color="#888888"><br>
--<br>
Bo Berglund<br>
Developer in Sweden<br>
<br>
______________________________<wbr>_________________<br>
fpc-pascal maillist  -  <a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.<wbr>org</a><br>
<a href="http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal" rel="noreferrer" target="_blank">http://lists.freepascal.org/<wbr>cgi-bin/mailman/listinfo/fpc-<wbr>pascal</a><br>
</font></blockquote></div><br></div></div></div>