- grep or egrep if you are using Mac or Linux
- findstr or select-string if you are using MS Windows
create csv files by extracting data from a starting csv file
조회 수: 5 (최근 30일)
이전 댓글 표시
Hi everyone, I am writing to you as not being familiar with matlab I do not know the commands and I would need your help to create a script.
I have a large csv file that cannot be opened with excel, within this file there are many lines that are composed of both numbers and letters, within these lines there are codes formed by letters and numbers (eg UPRE 14234) that identify the element that interests me and to which they belong, in total there are 21 different UPRE codes.
What I would like is to divide the initial csv file into 21 csv files each composed with the lines concerning only one of those UPRE codes.
How can I do? Can anyone tell me what functions to use and how to write the script?
댓글 수: 0
채택된 답변
Walter Roberson
2020년 10월 30일
I suggest you work with lower level utilities:
https://stackoverflow.com/questions/1416241/is-there-a-pattern-matching-utility-like-grep-in-windows
These will be much more efficient than the equivalent MATLAB code.
Another option is to make use of the fact that Perl is shipped with MATLAB.
댓글 수: 18
Walter Roberson
2020년 11월 2일
I managed to upgrade my Windows to the latest release and all the other update housekeeping tasks (except I didn't finish defragmenting the drive) . I managed to install Mac OS Catalina and use that to download all of the Mac and Windows install files and install R2020b on Catalina, which gives me the files I need to flip over to Windows to install R2020b. So I have everything ready.
... but by then it was close to 4am so I started playing a game that I had been waiting on for the last year, as it needed Catalina and I had always been too busy answering questions to install Catalina before.
Walter Roberson
2020년 11월 3일
The below is tested.
Please note that you will need to add all strings that you want searched for into the UPREs cell array, and you must use exact matches.
The command that is created is quite sensitive to which quotes are used and how many are used. The rules for quoting strings in MS Windows are not well documented, and are quite different from Unix. The rules for handling double-quotes are particularly strange.
This code expects a text file, not a .xlsx file.
infile = 'exp_misure_prelievo.txt';
outdir = 'UPRE_files';
UPREs = {'UPRE_S14SPLO_901', 'UPRE_S14LCRN_901'};
if ~exist(outdir, 'dir'); mkdir(outdir); end
for K = 1 : length(UPREs)
this_UPRE = UPREs{K};
outfile = fullfile(outdir, [this_UPRE '.txt']);
cmd = sprintf('FINDSTR "|"""%s"""|" "%s" > "%s"', this_UPRE, infile, outfile);
[status, result] = system(cmd);
if status ~= 0
fprintf('Problem processing %s, output was:\n', this_UPRE);
fprintf('%s\n', result);
end
end
fprintf('Done\n');
I had to do a lot of work to get to the point of being able to debug this problem. I only boot Windows every few months, and it turned out to be a truly remarkable amount of work to get my Mac to share some files with Windows.
추가 답변 (2개)
Jon
2020년 10월 30일
Without knowing all of the details of what is in your files it is hard to give a specific answer. However for general advice I would suggest using the matlab function readcell. This will read the entire file into a cell array. You can then work with the data in that cell array relatively easily indexing by rows and columns. Maybe you can do the processing you want on this overall cell array and it isn't even necessary to create many smaller csv files unless you need them for some other task.
참고 항목
카테고리
Help Center 및 File Exchange에서 File Operations에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!