On Saturday, 20 February 2016 09:49:17 UTC+2, Larry Hudson  wrote:
> On 02/19/2016 10:14 AM, wrong.addres...@gmail.com wrote:
> [snip]
> >
> > This is precisely reading one character at a time. If not exactly reading 
> > one character, it is effectively looking at each character to assemble the 
> > number. Not a good sign. I guess there might be libraries which will help 
> > read numbers better, but I would expect a good language to be able to 
> > handle this basic thing for engineers - to read numbers like Fortran and 
> > Basic do.
> >
> > Still, if I have misunderstood something, I will be glad to be corrected. I 
> > would generally know that the first three numbers will be floating point, 
> > the next will be something and then the next will be something else, etc. 
> > Does that help or does one still have to look at each character and 
> > determine how to place it in a number?
> >
> > Thanks for your patience. I don't want surprises later on, which is why I 
> > am asking very stupid questions.
> >
> It absolutely does NOT require reading a character at a time!  You are 
> reading the data from a 
> text file, which means everything is a string.  These strings (or 
> sub-strings) can represent 
> integers, floats, dates, phone numbers or whatever.  Your example data 
> implies a free-form 
> style, where it is then necessary to determine the data type for each of 
> these (sub)strings 
> individually.  Of course, if your data has a defined fixed format, this is 
> simplified -- but 
> they are still initially strings that have to be converted.  String 
> processing in Python is very 
> powerful and versatile.
> 
> BTW, it does no good to continue to think strictly in BASIC techniques.  
> Python is a different 
> language with a different approach to attacking problems.  If you try to 
> write BASIC (or C or 
> Java or ...) programs in Python syntax you'll just get bad programs.  Forget 
> trying to find 
> features in Python that are identical to the features of BASIC.  Python 
> requires a different 
> mind-set to use it properly -- just like any other language.
> 
> Here is a rather naive somewhat brute-force way to read your example data.  
> I'm using a Python 
> list here to simulate the file reading.  (Actually, using read() instead of 
> readline() will also 
> give this list.)  Python lists are essentially the same as arrays in other 
> languages, but much 
> more powerful and versatile.  Two examples of the differences between arrays 
> and lists are:  can 
> use mixed data types, you are not restricted to all the same data type, and 
> the size of lists 
> are dynamic -- they grow or shrink as necessary.
> 
> Comments start with a #
> Strings in Python can be delimited by single-quotes ('), double-quotes (") or 
> triple-quotes (""" 
> or ''').  Triple-quoted strings can be multi-line text.  The triple-quote 
> here is used as what 
> Python calls a docstring, which it saves internally for documenting your 
> program.
> 
> <code>
> #   Define a function to determine the data type a string represents
> def chktyp(s):
>      """Check string s for int, float or string.  Returns the data and a type 
> code"""
>      try:
>          return int(s), 'int'      #  Try to convert to int, return it if 
> successful
>      except ValueError:            #  No, it's not an int
>          pass                      #  Drop into float test
>      try:
>          return float(s), 'float'  #  Try to convert to float, return it if 
> successful
>      except ValueError:            #  No, it's not a float
>          return s, 'str'           #  It must be a string
> 
> #   Here is your (simulated) data as a list of strings
> data = [
>      '2 12.657823 0.1823467E-04 114 0',
>      '3 4 5 9 11',
>      '"Lower"',                    #  Could be left simply as "Lower"
>      '278.15']
> 
> #   Process the data
> for line in data:                 #  For each line of the data
>      dat = line.split()            #  Make a list of the sub-strings in the 
> line
>      for stng in dat:              #  For each substring
>          dt, tp = chktyp(stng)     #  Get the data and the type
>          print('{} is a {}'.format(dt, tp))    #  Print this data
> </code>
> 
> Running this example gives this result:
> 
> 2 is a int
> 12.657823 is a float
> 1.823467e-05 is a float
> 114 is a int
> 0 is a int
> 3 is a int
> 4 is a int
> 5 is a int
> 9 is a int
> 11 is a int
> "Lower" is a str
> 278.15 is a float
> 
> I hope this gives you a slight hint about the Python way of doing things.  
> Yes, of course it's 
> very different from BASIC, but if you can pick up on the Pythonic way of 
> doing things I think 
> you might at least find it useful.
> 
>       -=- Larry -=-

I realise that this file i/o will have to be thought of in a different way if I 
start to use Python. This may still be worthwhile inspite of the complexity and 
loss in readability of the code.

To give an example of the kind of things I have to read (and I have to read 
numbers from several files usually), here is some VB6 code:

    Open "N020S.TXT" For Input As #8

    Input #8, ND, NIN, NT ' all integers
    Text9.Text = ND
    Text1 = CStr(NIN)
    Text4 = NT
    
    Text12 = ""
    For i = 1 To NIN
        Input #8, DINCOL(i) ' single precision floating point vector
        Text12 = Text12.Text & DINCOL(i) & " "
        If Dvarname(1) <> "" Then varname(i) = Dvarname(NLCOL(i)) ' strings
    Next i

    etc..

The data file (written by another VB6 code) contains in the first few lines:

 10            6             1 
8.65  0.2192347   3.33E-4    44     0.0051        6 
9 
 1 
2 1 
 3 

How complicated could this get in Python? Reading the numbers is one thing, and 
then placing the values in text boxes of the GUI. Or can I write my own reading 
subroutines which can then be called like 
ReadVBstyle 8, ND, NIN, NT 
to make the code more readable?
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to