Это то, что вы ищете ...?
Я думаю, вы должны использовать %s %s
как формат для сканирования текста, а не поплавок, потому что вектор не может быть преобразован в поплавок, например.
Я изменил это A = textscan(fid,'%s %s','Delimiter','\t');
, чтобы включить %s %s
. Кроме того, я думаю, вы хотите объединиться по первому измерению, а не по второму.
Я думаю, вы действительно хотите создать пару ключ/значение входного файла, а не просто считывать каждую строку в ячейку, но вы этого не утверждаете.
INPUT FILE
--------------
Field1: 1
Field2: two
Field3: 3
Field4: 4
Field5: 5
Field6: 6
Field7: [7 8 9]
fid = fopen('D:\tmp\t.txt','r');
A = textscan(fid,'%s %s','Delimiter','\t','headerLines',2);
cat(1,A{:})
ans =
{
[1,1] = Field1: 1
[2,1] = Field3: 3
[3,1] = Field5: 5
[4,1] = Field7: [7 8 9]
[5,1] = Field2: two
[6,1] = Field4: 4
[7,1] = Field6: 6
}
Если вы хотите создать пару ключ/значение, то вы можете разделить их на ключ и значение с петлей, которую можно использовать с Container класса, если это необходимо. Вы должны немного фильтровать свои строки (например, удалять двоеточие и т. Д.), Но вы получаете суть.
keySet = {};
valueSet = {};
for (n=1:size(A2,1))
s = A2{n};
ind = strfind(s,' ');
keySet{n} = s(1:ind(1));
valueSet{n} =s(ind(1):end);
end
Выход
keySet =
{
[1,1] = Field1:
[1,2] = Field3:
[1,3] = Field5:
[1,4] = Field7:
[1,5] = Field2:
[1,6] = Field4:
[1,7] = Field6:
}
valueSet =
{
[1,1] = 1
[1,2] = 3
[1,3] = 5
[1,4] = [7 8 9]
[1,5] = two
[1,6] = 4
[1,7] = 6
}
От Container class doc:
mapObj = containers.Map(keySet,valueSet)
Было бы гораздо лучше, если вы реальные данные. Например, как выглядит ваш вектор в файле? – kkuilla