2015-02-01 3 views
0

Я довольно новичок в Matlab, и я искал, неясно, следующую проблему: у меня есть файл tструктуры txt с несколькими строками, которые мне не нужны, но есть число строк внутри этого файла, которые имеют структурированный формат. Я изучал, как «загружать» файл для его редактирования, но ничего не могу найти. Поскольку я не знаю, если я ясно, позвольте мне показать вам содержимое в файле:Matlab - читать неструктурированный файл

8782 PROJCS [ "UTM-39", GEOGC .......

1 +676135,67755473056 +2673731,9365976951 -15 0

2 663999,99999999302 2717629,9999999981 -14,00231124135486 3

3 709999,99999999162 2707679,2185399458 -10 2

4 679972,20003752434 2674637,5679516452 0,070000000000000007 1

5 676124,87132483651 2674327,3183533219 -18,94794942571912 0

6 682614,20527054626 2671000,0000000549 -1,6383425512446661 0

...........

8780 682247,4593014461 2676571,1515358146 0,1541080392180566 0

8781 695426,98657108378 2698111,6168302582 -8.5039945992245904 0

8782 674723.80100125563 2675133.54869 35056 -19,920312922947179 0

.........

Я был бы признателен, если кто-то могу просто сказать, есть ли возможность открыть файл, чтобы позже загружать только строки, начинающиеся с 1, начиная с 8782. Первая строка и все остальные не важны. Я знаю, чем вручную копировать и вставлять в новый файл было бы решением, но я хотел бы узнать о возможности прочитать файл и отредактировать его для других моих идей. Спасибо!

+0

Когда вы «нагрузки» файл, вы просто хотите сохранить текст в массиве символов или вы хотите выполнить некоторую обработку при чтении каждой строки? – rayryeng

+0

Спасибо @ rayryeng. Прежде чем вы отправили, мне удалось как-то сделать то, что я хотел. Я использовал fopen, и объединив fget и textscan, мне удалось прочитать каждую строку. Но тогда у меня другая проблема (я очень отвратительна с MATLAB). Позволь мне объяснить. Я написал: D = textscan (B, '% s% s% s% s% s'); RowNo = D {1} {1}; X1 = D {2} {1}; Y1 = D {3} {1}; Z1 = D {4} {1}; Index1 = D {5} {1} ; И я был счастлив, потому что, когда я проверил значение, т. Е. Z1, я сказал, что -10. Но если я попробую Z1 = Z1 + 10, я не получаю 0, а некоторую 3dim-матрицу. Я говорю вам, что я учусь сам, поэтому я могу ошибаться, что может показаться глупым для экспертов. – pino

+0

Я понимаю, что у меня нет номера, но есть матрица, которая присваивает некоторые значения -, 1 и 0. Чтобы быть более ясным, теперь я хочу, чтобы я мог «читать» txt-файл, для первой строки , введите значение 1 в RowNo, сделайте X1 iqual до 676135.67755473056, Y1 до .... так что я могу, скажем, изменить Z1 и сохранить ту же строку с изменением в Z1, а затем перейти к следующей строке ... Теперь Я просто хочу знать, как сделать RowNo, X1, Y1, ... "numbers", остальное я могу узнать сам ... надеюсь. Буду признателен за ваши ответы. Между тем, я продолжу искать решение, возможно, мне удастся его найти :) – pino

ответ

0
% Now lines{i} is the string of the i'th line. 
lines = strsplit(fileread('filename'), '\n') 

% Now elements{i}{j} is the j'th field of the i'th line. 
elements = arrayfun(@(x){strsplit(x{1}, ' ')}, lines) 

% Remove the first row: 
elements(1) = [] 

% Take the first several rows: 
n_rows = 8782 
elements = elements(1:n_rows) 

Или, если количество строк, которые нужно принимать не фиксированы, вы можете заменить последние два утверждения выше по:

firsts = arrayfun(@(x)str2num(x{1}{1}), elements) 
n_rows = find((firsts(2:end) - firsts(1:end-1)) ~= 1, 1, 'first') 
elements = elements(1:n_rows) 
+0

спасибо большое shaoyl85, но функция strsplit не работает. – pino

Смежные вопросы