2015-07-16 3 views
1

Я хотел бы перейти от этого: enter image description hereУвеличение адресов в строковом формате в Excel или Matlab?

к этому: enter image description here

На либо превосходят или Matlab. Эта операция должна быть зациклирована на всей электронной таблице, и поэтому я скептически отношусь к тому, что у excel есть эффективный способ сделать это. Имейте в виду, что поле «Address Number» является строковой переменной.

Я загрузил электронную таблицу в виде массива Matlab Cell и подумываю об извлечении значений по одному, до и после дефиса, конвертации в double и приращения скрипта и заполнения нового массива, но это довольно далеко, Я не уверен, какие соответствующие команды.

Благодаря

ответ

1

Чтобы включить номер адреса в ряд чисел, следующий код должен помочь:

instring = '1428-32'; 
stub = instring; 
digits = 0; 
while ~strcmp(stub(end),'-') 
    stub = stub(1:end-1); 
    digits = digits + 1; 
end 
stub = stub(1:end-1); %stub is now your starting number, but as a string 
maxval = instring(end-(digits-1):end); 
maxval = strcat(stub(1:end-digits),maxval); 
outlist = str2double(stub):str2double(maxval); 

Я оставлю вас, чтобы выяснить, как поставить это обратно в более крупный массив с остальными данными в нем, это не должно быть слишком сложно ...

+1

Я сделал это несколько иначе, хотя ваш способ выглядит намного эффективнее: function [vector] = Increment (string) string = strsplit (строка, '-') len1 = Длина (строка {1,1}) len2 = длина (строка {1,2}) len3 = len1-len2 basenumber = 0 для г = 1: len3 basenumber = basenumber + str2double (строка {1, 1} (1, i)) * 10^(len1-i) end targetnumber = basenumber + str2double (строка (1,2)) firstnumber = str2double (строка (1,1)) vector = нули (номер цели -firstnumber + 1, 1) для i = 0: (номер -номер-firstnumber) вектор (i + 1) = firstnumber + i end – user32882