retriving a text file content information in Matlab
I have a .txt file which includes 300 lines. For example the first line is:
ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
or the second line is:
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
Only 'time' and 'file' values are numbers and the others are string.
I want to store the values of "correct", "time", "guess", "action" and "file" of the whole 300 lines in the different variables (like some arrays).
How can I do this in the Matlab?
matlab
add a comment |
I have a .txt file which includes 300 lines. For example the first line is:
ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
or the second line is:
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
Only 'time' and 'file' values are numbers and the others are string.
I want to store the values of "correct", "time", "guess", "action" and "file" of the whole 300 lines in the different variables (like some arrays).
How can I do this in the Matlab?
matlab
add a comment |
I have a .txt file which includes 300 lines. For example the first line is:
ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
or the second line is:
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
Only 'time' and 'file' values are numbers and the others are string.
I want to store the values of "correct", "time", "guess", "action" and "file" of the whole 300 lines in the different variables (like some arrays).
How can I do this in the Matlab?
matlab
I have a .txt file which includes 300 lines. For example the first line is:
ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
or the second line is:
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
Only 'time' and 'file' values are numbers and the others are string.
I want to store the values of "correct", "time", "guess", "action" and "file" of the whole 300 lines in the different variables (like some arrays).
How can I do this in the Matlab?
matlab
matlab
asked Nov 26 '18 at 17:12
TaranehTaraneh
756
756
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Option 1:
You can use textscan
with the following formatSpec:
formatSpec = 'ANSWER: correct:%s time:%f guess:%s action:%s file: %f';
data = textscan(fileID,formatSpec,'Delimiter',',');
where fileID
is the file identifier obtained by fopen
.
Option 2:
Another option is to use readtable
, with the formatting above (directly with the file name, no fileID):
data = readtable('53485991.txt','Format',formatSpec,'Delimiter',',',...
'ReadVariableNames',false);
% the next lines are just to give the table variables some meaningful names:
varNames = strsplit(fmt,{'ANSWER',':','%s',' ','%f'});
data.Properties.VariableNames = varNames(2:end-1);
The result (ignore the values, as I messed that example a little bit while playing with it):
data =
4×5 table
correct time guess action file
_______ ______ _______________ ______ ____
'yes' 6.8888 'Lay' 'Lay' 16
'no' 7.8762 'Put on top' 'Stir' 18
'no' 7.1503 'Put on bottom' 'Stir' 3
'no' 7.151 'go' 'Stir' 270
The advantage in option 2 is that a table is a much more convenient way to hold these data than a cell array (which is the output of textscan
).
Learned something new. Thetextscan
is elegant.
– Banghua Zhao
Nov 26 '18 at 18:34
@BanghuaZhaoreadtable
is even better...
– EBH
Nov 26 '18 at 18:35
Thanks for the answer. When I use "option 1", data will be appeared in such a form: data = {1x1 cell} [6.8807] {1x1 cell} {1x1 cell} [0x1 double], but how can I retrive my information like time,correct,etc from this data?
– Taraneh
Nov 26 '18 at 19:12
First, it's better to use option 2. Second, you should type:correct = data{1}
,time = data{2}
and so on until 5 (file), for each field in your data.
– EBH
Nov 26 '18 at 19:21
1
You have to check that your data is formatted correctly, exactly as you wrote it above. Another option is of encoding issue, but it's hard to tell from the info in this error.
– EBH
Nov 26 '18 at 20:24
|
show 2 more comments
Use fgetl
to get a line of the file and while
loop to read all of the lines.
For each line, use regexp
to partition the string into cells by :
and ,
delimiter. Then, use strip
to remove leading and trailing whitespace for each cell.
Here is the solution:
f = fopen('a.txt');
aline = fgetl(f);
i = 1;
while ischar(aline)
content = strip(regexp(aline,':|,','split'));
correct{i} = content{3};
time(i) = str2double(content{5});
guess{i}= content{7};
action{i} = content{9};
file(i) = str2double(content{11});
i = i + 1;
aline = fgetl(f);
end
fclose(f);
Example:
Suppose a.txt file looks like this
ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
After executing the script, the results are
correct =
1×2 cell array
'yes' 'no'
time =
6.8807 7.1504
guess =
1×2 cell array
'Lay' 'Put on top'
action =
1×2 cell array
'Lay' 'Stir'
file =
16 18
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53485991%2fretriving-a-text-file-content-information-in-matlab%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Option 1:
You can use textscan
with the following formatSpec:
formatSpec = 'ANSWER: correct:%s time:%f guess:%s action:%s file: %f';
data = textscan(fileID,formatSpec,'Delimiter',',');
where fileID
is the file identifier obtained by fopen
.
Option 2:
Another option is to use readtable
, with the formatting above (directly with the file name, no fileID):
data = readtable('53485991.txt','Format',formatSpec,'Delimiter',',',...
'ReadVariableNames',false);
% the next lines are just to give the table variables some meaningful names:
varNames = strsplit(fmt,{'ANSWER',':','%s',' ','%f'});
data.Properties.VariableNames = varNames(2:end-1);
The result (ignore the values, as I messed that example a little bit while playing with it):
data =
4×5 table
correct time guess action file
_______ ______ _______________ ______ ____
'yes' 6.8888 'Lay' 'Lay' 16
'no' 7.8762 'Put on top' 'Stir' 18
'no' 7.1503 'Put on bottom' 'Stir' 3
'no' 7.151 'go' 'Stir' 270
The advantage in option 2 is that a table is a much more convenient way to hold these data than a cell array (which is the output of textscan
).
Learned something new. Thetextscan
is elegant.
– Banghua Zhao
Nov 26 '18 at 18:34
@BanghuaZhaoreadtable
is even better...
– EBH
Nov 26 '18 at 18:35
Thanks for the answer. When I use "option 1", data will be appeared in such a form: data = {1x1 cell} [6.8807] {1x1 cell} {1x1 cell} [0x1 double], but how can I retrive my information like time,correct,etc from this data?
– Taraneh
Nov 26 '18 at 19:12
First, it's better to use option 2. Second, you should type:correct = data{1}
,time = data{2}
and so on until 5 (file), for each field in your data.
– EBH
Nov 26 '18 at 19:21
1
You have to check that your data is formatted correctly, exactly as you wrote it above. Another option is of encoding issue, but it's hard to tell from the info in this error.
– EBH
Nov 26 '18 at 20:24
|
show 2 more comments
Option 1:
You can use textscan
with the following formatSpec:
formatSpec = 'ANSWER: correct:%s time:%f guess:%s action:%s file: %f';
data = textscan(fileID,formatSpec,'Delimiter',',');
where fileID
is the file identifier obtained by fopen
.
Option 2:
Another option is to use readtable
, with the formatting above (directly with the file name, no fileID):
data = readtable('53485991.txt','Format',formatSpec,'Delimiter',',',...
'ReadVariableNames',false);
% the next lines are just to give the table variables some meaningful names:
varNames = strsplit(fmt,{'ANSWER',':','%s',' ','%f'});
data.Properties.VariableNames = varNames(2:end-1);
The result (ignore the values, as I messed that example a little bit while playing with it):
data =
4×5 table
correct time guess action file
_______ ______ _______________ ______ ____
'yes' 6.8888 'Lay' 'Lay' 16
'no' 7.8762 'Put on top' 'Stir' 18
'no' 7.1503 'Put on bottom' 'Stir' 3
'no' 7.151 'go' 'Stir' 270
The advantage in option 2 is that a table is a much more convenient way to hold these data than a cell array (which is the output of textscan
).
Learned something new. Thetextscan
is elegant.
– Banghua Zhao
Nov 26 '18 at 18:34
@BanghuaZhaoreadtable
is even better...
– EBH
Nov 26 '18 at 18:35
Thanks for the answer. When I use "option 1", data will be appeared in such a form: data = {1x1 cell} [6.8807] {1x1 cell} {1x1 cell} [0x1 double], but how can I retrive my information like time,correct,etc from this data?
– Taraneh
Nov 26 '18 at 19:12
First, it's better to use option 2. Second, you should type:correct = data{1}
,time = data{2}
and so on until 5 (file), for each field in your data.
– EBH
Nov 26 '18 at 19:21
1
You have to check that your data is formatted correctly, exactly as you wrote it above. Another option is of encoding issue, but it's hard to tell from the info in this error.
– EBH
Nov 26 '18 at 20:24
|
show 2 more comments
Option 1:
You can use textscan
with the following formatSpec:
formatSpec = 'ANSWER: correct:%s time:%f guess:%s action:%s file: %f';
data = textscan(fileID,formatSpec,'Delimiter',',');
where fileID
is the file identifier obtained by fopen
.
Option 2:
Another option is to use readtable
, with the formatting above (directly with the file name, no fileID):
data = readtable('53485991.txt','Format',formatSpec,'Delimiter',',',...
'ReadVariableNames',false);
% the next lines are just to give the table variables some meaningful names:
varNames = strsplit(fmt,{'ANSWER',':','%s',' ','%f'});
data.Properties.VariableNames = varNames(2:end-1);
The result (ignore the values, as I messed that example a little bit while playing with it):
data =
4×5 table
correct time guess action file
_______ ______ _______________ ______ ____
'yes' 6.8888 'Lay' 'Lay' 16
'no' 7.8762 'Put on top' 'Stir' 18
'no' 7.1503 'Put on bottom' 'Stir' 3
'no' 7.151 'go' 'Stir' 270
The advantage in option 2 is that a table is a much more convenient way to hold these data than a cell array (which is the output of textscan
).
Option 1:
You can use textscan
with the following formatSpec:
formatSpec = 'ANSWER: correct:%s time:%f guess:%s action:%s file: %f';
data = textscan(fileID,formatSpec,'Delimiter',',');
where fileID
is the file identifier obtained by fopen
.
Option 2:
Another option is to use readtable
, with the formatting above (directly with the file name, no fileID):
data = readtable('53485991.txt','Format',formatSpec,'Delimiter',',',...
'ReadVariableNames',false);
% the next lines are just to give the table variables some meaningful names:
varNames = strsplit(fmt,{'ANSWER',':','%s',' ','%f'});
data.Properties.VariableNames = varNames(2:end-1);
The result (ignore the values, as I messed that example a little bit while playing with it):
data =
4×5 table
correct time guess action file
_______ ______ _______________ ______ ____
'yes' 6.8888 'Lay' 'Lay' 16
'no' 7.8762 'Put on top' 'Stir' 18
'no' 7.1503 'Put on bottom' 'Stir' 3
'no' 7.151 'go' 'Stir' 270
The advantage in option 2 is that a table is a much more convenient way to hold these data than a cell array (which is the output of textscan
).
edited Nov 28 '18 at 20:54
answered Nov 26 '18 at 18:08
EBHEBH
9,46332248
9,46332248
Learned something new. Thetextscan
is elegant.
– Banghua Zhao
Nov 26 '18 at 18:34
@BanghuaZhaoreadtable
is even better...
– EBH
Nov 26 '18 at 18:35
Thanks for the answer. When I use "option 1", data will be appeared in such a form: data = {1x1 cell} [6.8807] {1x1 cell} {1x1 cell} [0x1 double], but how can I retrive my information like time,correct,etc from this data?
– Taraneh
Nov 26 '18 at 19:12
First, it's better to use option 2. Second, you should type:correct = data{1}
,time = data{2}
and so on until 5 (file), for each field in your data.
– EBH
Nov 26 '18 at 19:21
1
You have to check that your data is formatted correctly, exactly as you wrote it above. Another option is of encoding issue, but it's hard to tell from the info in this error.
– EBH
Nov 26 '18 at 20:24
|
show 2 more comments
Learned something new. Thetextscan
is elegant.
– Banghua Zhao
Nov 26 '18 at 18:34
@BanghuaZhaoreadtable
is even better...
– EBH
Nov 26 '18 at 18:35
Thanks for the answer. When I use "option 1", data will be appeared in such a form: data = {1x1 cell} [6.8807] {1x1 cell} {1x1 cell} [0x1 double], but how can I retrive my information like time,correct,etc from this data?
– Taraneh
Nov 26 '18 at 19:12
First, it's better to use option 2. Second, you should type:correct = data{1}
,time = data{2}
and so on until 5 (file), for each field in your data.
– EBH
Nov 26 '18 at 19:21
1
You have to check that your data is formatted correctly, exactly as you wrote it above. Another option is of encoding issue, but it's hard to tell from the info in this error.
– EBH
Nov 26 '18 at 20:24
Learned something new. The
textscan
is elegant.– Banghua Zhao
Nov 26 '18 at 18:34
Learned something new. The
textscan
is elegant.– Banghua Zhao
Nov 26 '18 at 18:34
@BanghuaZhao
readtable
is even better...– EBH
Nov 26 '18 at 18:35
@BanghuaZhao
readtable
is even better...– EBH
Nov 26 '18 at 18:35
Thanks for the answer. When I use "option 1", data will be appeared in such a form: data = {1x1 cell} [6.8807] {1x1 cell} {1x1 cell} [0x1 double], but how can I retrive my information like time,correct,etc from this data?
– Taraneh
Nov 26 '18 at 19:12
Thanks for the answer. When I use "option 1", data will be appeared in such a form: data = {1x1 cell} [6.8807] {1x1 cell} {1x1 cell} [0x1 double], but how can I retrive my information like time,correct,etc from this data?
– Taraneh
Nov 26 '18 at 19:12
First, it's better to use option 2. Second, you should type:
correct = data{1}
, time = data{2}
and so on until 5 (file), for each field in your data.– EBH
Nov 26 '18 at 19:21
First, it's better to use option 2. Second, you should type:
correct = data{1}
, time = data{2}
and so on until 5 (file), for each field in your data.– EBH
Nov 26 '18 at 19:21
1
1
You have to check that your data is formatted correctly, exactly as you wrote it above. Another option is of encoding issue, but it's hard to tell from the info in this error.
– EBH
Nov 26 '18 at 20:24
You have to check that your data is formatted correctly, exactly as you wrote it above. Another option is of encoding issue, but it's hard to tell from the info in this error.
– EBH
Nov 26 '18 at 20:24
|
show 2 more comments
Use fgetl
to get a line of the file and while
loop to read all of the lines.
For each line, use regexp
to partition the string into cells by :
and ,
delimiter. Then, use strip
to remove leading and trailing whitespace for each cell.
Here is the solution:
f = fopen('a.txt');
aline = fgetl(f);
i = 1;
while ischar(aline)
content = strip(regexp(aline,':|,','split'));
correct{i} = content{3};
time(i) = str2double(content{5});
guess{i}= content{7};
action{i} = content{9};
file(i) = str2double(content{11});
i = i + 1;
aline = fgetl(f);
end
fclose(f);
Example:
Suppose a.txt file looks like this
ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
After executing the script, the results are
correct =
1×2 cell array
'yes' 'no'
time =
6.8807 7.1504
guess =
1×2 cell array
'Lay' 'Put on top'
action =
1×2 cell array
'Lay' 'Stir'
file =
16 18
add a comment |
Use fgetl
to get a line of the file and while
loop to read all of the lines.
For each line, use regexp
to partition the string into cells by :
and ,
delimiter. Then, use strip
to remove leading and trailing whitespace for each cell.
Here is the solution:
f = fopen('a.txt');
aline = fgetl(f);
i = 1;
while ischar(aline)
content = strip(regexp(aline,':|,','split'));
correct{i} = content{3};
time(i) = str2double(content{5});
guess{i}= content{7};
action{i} = content{9};
file(i) = str2double(content{11});
i = i + 1;
aline = fgetl(f);
end
fclose(f);
Example:
Suppose a.txt file looks like this
ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
After executing the script, the results are
correct =
1×2 cell array
'yes' 'no'
time =
6.8807 7.1504
guess =
1×2 cell array
'Lay' 'Put on top'
action =
1×2 cell array
'Lay' 'Stir'
file =
16 18
add a comment |
Use fgetl
to get a line of the file and while
loop to read all of the lines.
For each line, use regexp
to partition the string into cells by :
and ,
delimiter. Then, use strip
to remove leading and trailing whitespace for each cell.
Here is the solution:
f = fopen('a.txt');
aline = fgetl(f);
i = 1;
while ischar(aline)
content = strip(regexp(aline,':|,','split'));
correct{i} = content{3};
time(i) = str2double(content{5});
guess{i}= content{7};
action{i} = content{9};
file(i) = str2double(content{11});
i = i + 1;
aline = fgetl(f);
end
fclose(f);
Example:
Suppose a.txt file looks like this
ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
After executing the script, the results are
correct =
1×2 cell array
'yes' 'no'
time =
6.8807 7.1504
guess =
1×2 cell array
'Lay' 'Put on top'
action =
1×2 cell array
'Lay' 'Stir'
file =
16 18
Use fgetl
to get a line of the file and while
loop to read all of the lines.
For each line, use regexp
to partition the string into cells by :
and ,
delimiter. Then, use strip
to remove leading and trailing whitespace for each cell.
Here is the solution:
f = fopen('a.txt');
aline = fgetl(f);
i = 1;
while ischar(aline)
content = strip(regexp(aline,':|,','split'));
correct{i} = content{3};
time(i) = str2double(content{5});
guess{i}= content{7};
action{i} = content{9};
file(i) = str2double(content{11});
i = i + 1;
aline = fgetl(f);
end
fclose(f);
Example:
Suppose a.txt file looks like this
ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
After executing the script, the results are
correct =
1×2 cell array
'yes' 'no'
time =
6.8807 7.1504
guess =
1×2 cell array
'Lay' 'Put on top'
action =
1×2 cell array
'Lay' 'Stir'
file =
16 18
answered Nov 26 '18 at 18:04
Banghua ZhaoBanghua Zhao
1,2851719
1,2851719
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53485991%2fretriving-a-text-file-content-information-in-matlab%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown