Read .txt and Write in matab

Hi
i have 30000 thousand line of input file in text file, but i only need line 2618-3400.
imposible if i have to write manual to the end
how to write value C that consist of data from 2618-3400
A=readfile('data.txt')';
%line 2618 to 3484
C =[A{2618,1} A{2619,1} A{2620,1} A{2621,1} A{2622,1} A{2623,1} A{2624,1}]
format long g
pf = sscanf(C,'%f')

7 Comments

uploading data.txt would be helpful
already but in data.txt i have more than 30K line, what i need only line number 2618-3400
I'm unfamiliar with readfile() (FEX submission) but I read the description and it appears to be a fileread() wrapper with some enhancements.
Why don't you use either function to just read in the entire file and the extract the rows you need? That would take 2 lines of code and it's pretty fast.
here is my output file
i have no idea with fileread(), but the main propose is a part of whole output file
Adam Danz
Adam Danz on 11 Nov 2019
Edited: Adam Danz on 11 Nov 2019
"i have no idea with fileread(),"
It's really easy to read in the entire file. You literally just provide the filename. Once you've read in the entire file, then you just use indexing to extract the rows you want.
more complexs and its become char?
Adam Danz
Adam Danz on 11 Nov 2019
Edited: Adam Danz on 12 Nov 2019
Reading in the entire file is MUCH less complex than the method you're currently using. The data are read in as char just like the method you're already using. That's why you're applying sscanf.

Sign in to comment.

 Accepted Answer

I suspect this is what you need:
C=readfile('output.txt');%read the file to a cell array
Ca=C(2618:3484);%select the lines
%process every line to doubles
Cb=cellfun(@(x) sscanf(x,'%f'),Ca,'UniformOutput',false);
%convert to matrix
out=cell2mat(Cb)';

2 Comments

perfect
If this solved your question, feel free to mark it as accepted answer. If not, feel free to comment with your remaining issues.

Sign in to comment.

More Answers (1)

Read in the whole file at once. In this example I'm using fileread() because I'm unfamiliar with the FEX submission readfile() mentioned in your question.
C = fileread('myTextFile.txt');
Split the char array by lines into a cell array
Ca = strsplit(C,newline);
Extract text lines n to m
Ca(n:m)
If you'd rather have a char array as output
char(Ca(n:m))

3 Comments

It doesn't seem to matter for this specific file (especially for the numerical data part), but the fileread function ignores the encoding, which results in the wrong output for any char >255. Which is why I wrote this submission in the first place (and because many methods of file reading throw away blank lines).
I just had the chance to check out that function. I see why it would be useful!
You can probably imagine the frustration that led to me writing this function. I admit it is a strange use case to want a text file reader that handles UTF8 and ANSI for both Matlab and Octave. I even managed to find a bug in the Octave implemention of textscan.
If you have any suggestions for how to make the function more robust, please feel free to comment on the FEX (or send me an email, you can get the address from the function doc).

Sign in to comment.

Categories

Find more on Data Import and Analysis in Help Center and File Exchange

Products

Release

R2018a

Asked:

on 11 Nov 2019

Commented:

Rik
on 13 Nov 2019

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!