2016-08-13 5 views
0

У меня есть массив с квазара URL-адресов хранится в немСортировка массива адресов

http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0269/spec-0269-51581-0467.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0329/spec-0329-52056-0059.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/104/spectra/2957/spec-2957-54807-0164.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0342/spec-0342-51691-0089.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/2881/spec-2881-54502-0508.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0302/spec-0302-51616-0435.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/2947/spec-2947-54533-0371.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0301/spec-0301-51942-0460.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/104/spectra/2962/spec-2962-54774-0461.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/2974/spec-2974-54592-0185.fits 

Я хочу разобраться в массив URL на основе числа рядом с spec- и не используя алфавитный порядок. Я отсортировал массив с sort, но это не помогло, так как он всегда принимал строку 3rd и 2nd last, так как они имеют 1.

Я хотел бы иметь выход как этот

http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0269/spec-0269-51581-0467.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0301/spec-0301-51942-0460.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0302/spec-0302-51616-0435.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0329/spec-0329-52056-0059.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0342/spec-0342-51691-0089.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/2881/spec-2881-54502-0508.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/2947/spec-2947-54533-0371.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/104/spectra/2957/spec-2957-54807-0164.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/104/spectra/2962/spec-2962-54774-0461.fits 
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/2974/spec-2974-54592-0185.fits 

ответ

1

Если вы всегда будете иметь этот шаблон, вы можете попробовать:

fileName = strsplit(myUrl, '/')(end) 
number = strsplit(fileName(5:end), '.')(0) 

Собираюсь вас через эту причину понять все. ..

Мы начинаем с

http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0269/spec-0269-51581-0467.fits 

Сначала мы разделим URL-адрес на символы /. Это вернет вектор строк, разделенных с этого символа. Поскольку число для сортировки сохраняется после окончательного /, мы можем пройти end, чтобы захватить последний. Теперь у нас есть

spec-0269-51581-0467.fits 

Далее, давайте удалим эти надоедливые spec- из числа. Этот шаг не является действительно необходимым, поскольку он является постоянным во всех URL-адресах, но давайте просто сделаем это для удовольствия. Мы можем использовать подстроку Matlab для захвата символов после -, используя fileName(5:end). Это создаст строку, начинающуюся с 5-го символа (в данном случае, 0) и продолжит до конца. Отлично, теперь у нас есть

0269-51581-0467.fits 

Хорошо выглядит! Опять же, эта часть также не является полностью необходимой, но на всякий случай, по которой вам может понадобиться, я включил ее. Мы можем использовать функцию strsplit снова, но на этот раз разделить на . и захватить первый элемент пропускания 0. Теперь мы имеем

0269-51581-0467 

Идите вперед и сортировать этот маленький парень, и вы хорошо идти!

+1

Спасибо, я использовал вариант вашего первого ответа. Просто пришел сюда, чтобы поблагодарить вас после окончания моей работы. Я выполнил свою задачу, разделив его на '-', и он дал мне 4 строки, отсортировал 2-й и использовал индексы этого: используя [this] (http://stackoverflow.com/questions/37948031/removing- non-unique-values-and-remranging-vectors) и [this] (https://www.mathworks.com/matlabcentral/answers/160560-access-cell-array-inside-another-cell-array) вопрос: I выровнял другой, а не комбинировал с 'strcat', чтобы вернуть полные URL-адреса. –