2016-10-02 2 views
0

Ich habe große Textdatei, die wie folgt aussieht:Wie teilt man große Textdateien in jeder Leerzeile mit MATLAB in kleinere Textdateien auf?

PMID- 123456123 
OWN - NLM 
DA - 20160930 

PMID- 27689094 
OWN - NLM 
VI - 2016 
DP - 2016 

PMID- 27688828 
OWN - NLM 
STAT- Publisher 
DA - 20160930 
LR - 20160930 

und so weiter ... Ich mag würde die Textdatei in kleinere Textdateien nach jeder Leerzeile spalten. Name auch jede Textdatei auf seine PMID Nummer entspricht, so sieht es wie folgt aus:

Dateiname '123456123.txt' enthält:

PMID- 123456123 
OWN - NLM 
DA - 20160930 

Dateiname '27689094.txt' enthält:

PMID- 27689094 
OWN - NLM 
VI - 2016 
DP - 2016 

Dateiname '27688828.txt' enthält:

PMID- 27688828 
OWN - NLM 
STAT- Publisher 
DA - 20160930 
LR - 20160930 

Das ist mein Versuch, ich weiß, wie man identif y Leerzeilen (glaube ich), aber ich weiß nicht, wie als kleine Textdatei teilen und sparen:

fid = fopen(filename); 
text = fgets(fid); 
blankline = sprintf('\r\n'); 

while ischar(text) 
    if strcmp(blankline,str) 
     %split the text 
    else 
     %write the text to the smaller file 
    end 
end 

Antwort

2

Sie in der gesamten Datei lesen und dann regexp, um den Inhalt zu leeren Zeilen aufgeteilt. Sie können dann erneut regexp verwenden, um die PMID jeder Gruppe zu extrahieren und dann alle Teile durchzugehen und sie zu speichern. Die Datei als eine gigantische Zeichenfolge wie diese zu verarbeiten wird wahrscheinlich leistungsfähiger sein als die Verwendung von fgets, um sie Stück für Stück zu lesen.

% Tell it what folder you want to put the files in 
outdir = '/my/folder'; 

% Read the initial file in all at once 
fid = fopen(filename, 'r'); 
data = fread(fid, '*char').'; 
fclose(fid); 

% Break it into pieces based upon empty lines 
pieces = regexp(data, '\n\s*\n', 'split'); 

% For each piece get the PMID 
pmids = regexp(pieces, '(?<=PMID-\s*)\d*', 'match', 'once'); 

% Now loop through and save each one 
for k = 1:numel(pieces) 
    % Use the PMID of this piece to construct a filename 
    filename = fullfile(outdir, [pmids{k}, '.txt']); 

    % Now write the piece to the file 
    fid = fopen(filename, 'w'); 
    fwrite(fid, pieces{k}); 
    fclose(fid); 
end 
+0

Vielen Dank! – tamkrit

Verwandte Themen