Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 12
1

Сколько раз находится одна и таже переменная в строчке?

21.12.2016, 17:56. Показов 493. Ответов 2
Метки нет (Все метки)

Привет. У меня возникла проблема. В моём Матлаб коде я генерирую себе из файла код ассемблера, который хочу анализировать. Этот код Матлабу представляетсе как cell array с именем proc_asm. У меня есть лист переменных, которые встречаются в proc_asm, класс листа переменных cell array, имя cell_new_name. Теперь я хочу сравнить proc_asm с cell_new_name и при этом посмотреть какие переменные из cell_new_name сколько раз встречаются в строчках proc_asm. В результате хотелось бы cell array К с позициями переменных в строках proc_asm, разделённый по строчкам. И cell array IZ, с именами переменных, которые стоят в каждой строчке, разделённый по строчкам.

Что я имею в ввиду с "разделённый по строчкам"? -> Если например в proc_asm X cтрочек, то тогда в К и IZ должно быть X - строчки proc_asm, где нету переменных.

Пока у меня только есть array K, но к сожалению только как сплошной array.

Вот результат моей командной строки:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ans = 
 
    'add t_2 t_1 t_1 ;'
    'mov_ispositive _Constant0 t_5 t_2 ;'
    'sub t_5 t_6 t_5 ;'
    'add t_6 t_6 t_6 ;'
    'mov _Constant1 ? t_2 ;'
    'dq t_6 ? 0x0000000000000000 ;'
    'dq t_5 ? 0x0000000000000000 ;'
    'dq t_2 ? 0xffffffffffffffff ;'
    'dq t_1 ? 0x0000000000000000 ;'
    'dq _Constant1 ? 0x3FF0000000000000 ;'
    'dq _Constant0 ? 0x0000000000000000 ;'
    'dq avoid ? 0x0000000000000000 ;'
 
 
cell_new_name = 
 
    't_6'    't_5'    't_2'    't_1'    []    []
K = 
 
    [5]    [9]    [13]    [27]    [31]    [9]    [5]    [13]    [5]    [9]    [13]    [18]    [4]    [4]    [4]    [4]
Вот кусочек кода, где всё происходит:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    
for codeidx = 1:length(node_list)  %codeidx = number of rows in proc_asm 
 
         for elementidx = 1 : length(cell_new_name)   %elementidx = number of variables in cell_new_name
             ks = strfind(proc_asm{codeidx}, cell_new_name{elementidx});  %find variables in proc_asm
             tl = length(ks);     %länge von ks -> number of variables found in a row of proc_asm
             ks = num2cell(ks); %it should be a cell for later access
            
               if ~isempty(tl);  %fill array K, if vaiables are found
                
               K = [K ks];        %K -> cell array with variables positions in proc_asm
             end
         
         end
    end
Спасибо большое и я надеюсь, что понятно объяснила мою проблему.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2016, 17:56
Ответы с готовыми решениями:

Одна и таже ссылка на три форума
Во-первых, хочу сказать, что новый дизайн сайта мне очень понравился. И, видимо, в связи с этим,...

Одна и таже ошибка в последнее время
В последнее время при добавлении новой формы (точно я не знаю с чем это связано) при компиляции...

Одна и таже ошибка преследует меня
Уже переустановил винду, скачал другой ТР(7.0), переписал несколько раз программу с нуля - ничего...

Сколько процентов составляет одна переменная от другой (Integer)
Мне нужно узнать сколько процентов SrrollBar "пройдено", "промотано" от его максимального значения ...

2
272 / 131 / 44
Регистрация: 05.02.2015
Сообщений: 843
25.12.2016, 12:26 2
ну, во-первых, вас не смущает, что в массиве k у вас пустые скобки квадратные стоят, т.е. вы пустые ячейки добавляете? а это все из-за не правильного сравнения: вы пишите:
Matlab M
1
2
tl = length(ks);* % это длина массива, если массив пустой, то длина = 0, но она не пустая
if ~isempty(tl); % ts никогда не будет пустой
вместо этого можно написать так:
Matlab M
1
2
tl = length(ks);* % вычисляем длину
if tl ~=0; %если длина ненулевая
или вообще длину не вычислять:
Matlab M
1
if ~isempty(ks ) % если массив пуст
теперь по существу вопроса: тестировать некогда, надеюсь суть уловите: заводим структуру из двух полей:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
s =[]% готовим переменную для ответа
for codeidx = 1:length(node_list) % сами знаете
for elementidx = 1 : length(cell_new_name) % комментарии появяться, когда будет что-то новое
ks = strfind(proc_asm{codeidx}, cell_new_name{elementidx});
if ~isempty(ks) % если массив не пуст, 
ks = num2cell(ks); % поменял строки кода местами, зачем получать ячейку, если массив пустой
u.k = ks% вводим вспомогательную переменную
u.is = cell_new_name(elementidx) % сохраняем переменную
s = [s u] % выходная переменная
end
end
end
теперь обращаться так: s.k s.is.
1
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 12
27.12.2016, 14:10  [ТС] 3
Спасибо большое! Структ строится, теперь мне надо дальше подумать как сравнить элементы структа с элементами одного массива.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2016, 14:10

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Одна и таже перееменная в main() и в своей функции
Всем доброго дня! Народ сдаюсь, 2 дня сижу а решения так не нашел! Есть строчная переменная ...

Во всех браузерах выскакивает одна и таже реклама
Здравствуйте. При посещение различных сайтов я заметил появление одной и той же рекламы. Помогите....

Chrome - одна и таже реклама на всех сайтах
Здравствуйте. В Chrom постоянно одна и таже реклама на всех сайтах, перестали работать ссылки на...

Самопроизвольное открытие вкладок с рекламой в браузере, на всех почти вкладках одна и таже реклама на банерах
Самопроизвольное открытие вкладок с рекламой в браузере, на всех почти вкладках одна и таже реклама...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.