How can I load .psv file to MATLAB?

I have downlaoded datase from PhysioNet/Computing in Cardiology Challenge 2019. Here all the data are in .psv format. Can anyone help me showing the way of loading this format data.

5 Comments

Attach the file........the link you gave is asking for credentials....do you expect us to create account in there and download the file?
Sorry this I am very new in asking questions. I have attached the file.
The data looks like:
HR|O2Sat|Temp
NaN|NaN|NaN
97|95|NaN
So these are really pipe-separated text files.
Diana Simona
Diana Simona on 11 Oct 2019
Edited: Diana Simona on 11 Oct 2019
Hey,
Have you figured it out how to do this?
Because i have encountered the same problem, i can't see and extract the values.
I can open the file and see the headers (HR|O2Sat|Temp|SBP|MAP|DBP|Resp etc). I can also see some values here and there, but i get a lot of NaN values.
ps: i dont have a lot of Matlab experience
What happened when you used the two methods that Jan suggested?

Sign in to comment.

 Accepted Answer

Jan
Jan on 9 May 2019
Edited: Jan on 13 May 2019
A small example would reveal, if this guess is correct: It is a pipe-separated text file. Then:
readmatrix(filename, 'Delimiter', '|', 'FileType', 'text')
[EDITED] And a dull manual method:
function [Data, Header] = ReadPSV(File)
% [Data, Header] = ReadPSV(File)
% INPUT:
% File: Char vector or string: Name of the file
% OUTPUT:
% Data: Double matrix, [nVariables x nFrames]
% Header: {nVariables x 1} cell string
%
% License: CC BY-SA 3.0
[fid, msg] = fopen(File, 'rt');
assert(fid ~= -1, 'Tools:ReadPSV:MissFile', ...
'Cannot open file:%s\n%s', File, msg);
Line1 = fgetl(fid); % Import 1st line
Header = strsplit(Line1, '|'); % Reply variables as cell string
n = numel(Header); % Number of variables
% [EDITED] start
str = fread(fid, [1, inf], '*char'); % Import data as string
str(str == char(10)) = '|'; % Replace line break by |
% [EDITED] end
Data = sscanf(str, '%f|', [n, inf]); % Extract numbers
fclose(fid);
end

3 Comments

The key for readmatrix is
readmatrix(filename, 'Filetype', 'text')
readmatrix is able to figure out the | delimiter, and also is smart enough to remove the header.
It might make more sense to use
readtable(filename, 'filetype', 'text')
as that gets you useful headers.
Jan, you can't fileread() a fid.
@Walter: Thank you. Fixed. And the next bug was:
str(str = char(10)) = '|';
% ^ Of course: ==

Sign in to comment.

More Answers (1)

Hello!
Jan's answer works preaty well, but if you read the codes provided by the challenge you will see how they read the files and there is no need for you to read them differently.

Categories

Find more on Chemistry in Help Center and File Exchange

Tags

Asked:

on 9 May 2019

Commented:

on 11 Oct 2019

Community Treasure Hunt

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

Start Hunting!