Octave help please -- Reading numbers from a file

  • Thread starter dRic2
  • Start date
  • #1
dRic2
Gold Member
755
182
Hi, I used to use MATLAB for this kind of thing, but now my pc broke and I need to run some scripts. I have a .txt file structured like this

10 -2.34454
12 -2.34566
14 -2.34677
... ...

and I want to store the data in two variables: the first is the "counting" (10, 12, ...) and the second is the value (-2.34454, ...). So I wrote the following script, but I run in the following problem

Code:
function [out1, out2] = read(fid)
    i = 1;

    while true
      currentline = fgetl(fid);
      if (currentline == -1)
        break;
      end
 
      pos = find(currentline == ' ');
 
      for j=1:pos
        count(j) = currentline(j);
      end

      for j=(pos+1):(length(currentline))
        value(j) = currentline(j);
      end
   
      count_num(i) = str2num(count);   % <--------- THIS WORKS
      value_num(i) = str2double(value); % <-------- THIS DOES NOT WORK !!!!!
      i++;
    end
 
    out1 = count_num;
    out2 = value_num;
end
The problem is that while I get my nice vector count_num = [10 12 14 ...], the other vector is [NaN, NaN, ...]. I also tried to add disp(value) to see if the string is acquired correctly and it is! The problem is the conversion! str2num also doesn't work.

Any help would be highly appreciated.

Ric
 

Answers and Replies

  • #2
Office_Shredder
Staff Emeritus
Science Advisor
Gold Member
4,014
227
The first thing I would do is check if your string starts with a space and you need to just exclude it. The second thing is if it's interpreting the - as a minus sign correctly - if you omit that character does it work? Lastly I would try to drop the last character, it might be reading a weird ending character it doesn't know what to do with.
 
  • Like
Likes dRic2 and Dale
  • #3
30,335
6,824
Line 17 should probably be value(j-pos) or something similar.

In general, when you have a standard routine failing you need to look at the inputs.
 
  • Love
Likes dRic2
  • #4
dRic2
Gold Member
755
182
Line 17 should probably be value(j-pos)
Thank you so much
 
  • Like
Likes Dale
  • #5
77
31
This script can be massively simplified:

read text file:
function [out1, out2] = read(fileName)

    fid = fopen(fileName)
    d = fscanf(fid,'%f', [2 inf])';
    out1 = d(:,1);
    out2 = d(:,2);
    fclose(fid);


end
 
  • Like
Likes dRic2
  • #6
dRic2
Gold Member
755
182
Thanks @Arjan82, I'll look for the documentation about fscanf :)
 

Related Threads on Octave help please -- Reading numbers from a file

Replies
4
Views
6K
Replies
5
Views
7K
Replies
3
Views
2K
Replies
1
Views
888
Replies
1
Views
771
  • Last Post
Replies
3
Views
3K
  • Last Post
Replies
1
Views
1K
Replies
1
Views
6K
  • Last Post
Replies
2
Views
6K
Top