<div dir="ltr"><div><div><div><div><div><div><div>James and Luciano,<br><br></div>The tough thing about the string functions in Grads is they only parse by spaces. So if you have a csv or other delimited file with no spaces, it suddenly takes a lot more coding work to parse lines of text. It appears this is the case for Luciano&#39;s work.<br><br></div>As long as you have a constant delimiter and a pattern to follow, this can still be done, but it will take some clever scripting.<br><br></div>The basic essence of reading in text data from a large file is to use a loop and the status messages. From the documentation on the read() function, you&#39;ll get two lines in return. The first line is an integer status message indicating things like &quot;ok&quot;, &quot;error&quot;, &quot;EOF&quot;, and the like. The second line contains the actual data. So the template of your code will be something like this<br><br></div>status = 0<br></div>while (status = 0)<br></div><div> raw = read(.....file......)<br></div><div> status = sublin(raw,1)<br></div><div> data = sublin(raw,2)<br></div><div> *....parse text data...<br></div>endwhile<br><br></div><div>If you need to store values in arrays, you can add an optional count variable in the while loop.<br><br></div><div>As for the parsing, I&#39;ve done this before, and it requires a few nested loops. But basically, within the loop above, you&#39;ll have something like<br>...<br>...<br></div><div>  f = 1<br></div><div>  row = 1<br></div><div>  check = substr(data,f,1)<br></div><div>  while (check ~= &#39;&#39;)<br></div><div>   if (check = [delimiter])<br></div><div>    row = row + 1<br></div><div>   endif<br></div><div>   if (row = [target_row_for_data])<br></div><div>     *read to next delimiter and count the number of characters you had to read to get there<br></div><div>     actual_data = substr(data,f-(n+1),n)<br></div><div>   endif<br></div><div>   f = f + 1<br></div><div>   check = substr(data,f,1)<br></div><div>  endwhile<br></div><div>...<br>...<br><br></div><div>where above it is assumed you know which entry in each line you are trying to read from and where n represents the character width of the target column of data. In your example, Luciano, it appears you are trying to read different columns depending on the row. In that case, you will have to create a separate array indicating the column for each particular line, and you&#39;ll definitely want to use the loop counter in that case. How you define that will have to be up to you since I don&#39;t know what you&#39;re doing.<br><br></div><div>Hope this helps. Good luck.<br><br></div><div>Jeff Duda<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 14, 2016 at 2:52 PM, James T. Potemra <span dir="ltr">&lt;<a href="mailto:jimp@hawaii.edu" target="_blank">jimp@hawaii.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <p>Luciano,</p>
    <p><br>
    </p>
    <p>I think you need to first subset by word (using subwrd; defined
      by spaces); in this case,</p>
    <p><br>
    </p>
    <p>var1 = subwrd(line1,3)</p>
    <p>var = substr(var1,28,4)</p>
    <p><br>
    </p>
    <p>Jim<br>
    </p><div><div class="h5">
    <br>
    <div>On 9/14/16 7:47 AM, Luciano Ritter
      wrote:<br>
    </div>
    </div></div><blockquote type="cite"><div><div class="h5">
      
      
      <div style="font-size:12pt;color:#000000;background-color:#ffffff;font-family:Calibri,Arial,Helvetica,sans-serif">
        <div>Hi<br>
          <br>
          I am trying to read a data file in .txt and extract the
          information that I need.<br>
          I read the file trough the function &#39;read&#39;, but the problem is
          that i can&#39;t extract the information.<br>
          The format of the data is:<br>
          line1 = 83844;01/01/2000;1200;57.6;23.<wbr>6;22.8;93;0;0;<br>
          line2 = 83844;01/01/2000;1800;;23.6;<wbr>22.6;91;18;6.6;<br>
          line3 = 83844;02/01/2000;0000;;22;21.<wbr>3;93;18;4.6;<br>
          line4 = 83844;02/01/2000;1200;51.4;23.<wbr>2;21.7;87;18;3.3;<br>
          <br>
          I need to extract only 23,6 ; 23,6 ; 22 ; 23,2 of the first,
          second, third and fourth lines. I was trying with the
          intrinsic function, for example to the first line:<br>
          <br>
          var = substr(line1,28,4)<br>
          <br>
          var = 23,6<br>
          <br>
          If it was only those 4 lines, i could do manually but they are
          10200 lines. So, I think i need some loop with &#39;while&#39;
          variating the substr function, but i don&#39;t know how to do
          this.<br>
          <br>
          Someone can help me?<br>
          <br>
          Thanks a lot.<br>
        </div>
        <div>
          <div><br>
          </div>
        </div>
      </div>
      <br>
      <fieldset></fieldset>
      <br>
      </div></div><pre>______________________________<wbr>_________________
gradsusr mailing list
<a href="mailto:gradsusr@gradsusr.org" target="_blank">gradsusr@gradsusr.org</a>
<a href="http://gradsusr.org/mailman/listinfo/gradsusr" target="_blank">http://gradsusr.org/mailman/<wbr>listinfo/gradsusr</a>
</pre>
    </blockquote>
    <br>
  </div>

<br>______________________________<wbr>_________________<br>
gradsusr mailing list<br>
<a href="mailto:gradsusr@gradsusr.org">gradsusr@gradsusr.org</a><br>
<a href="http://gradsusr.org/mailman/listinfo/gradsusr" rel="noreferrer" target="_blank">http://gradsusr.org/mailman/<wbr>listinfo/gradsusr</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Jeff Duda<br>Post-doctoral research associate<br>University of Oklahoma School of Meteorology<br></div></div></div>
</div>