Функция readtable () удаляет первые три строки из моей таблицы - PullRequest
0 голосов
/ 29 апреля 2020

При написании своего кода я понял, что первые 3 строки из таблицы, которую я недавно записал в файл .txt, отсутствуют. Я создал таблицу в файле кода Matlab и хотел использовать ее в другом файле кода Matlab, поэтому я использовал writetable (). Затем я использовал readtable () в другом файле кода.

После просмотра всех строк кода, в которых я внес любые изменения в таблицу, я пришел к выводу, что моя проблема была вызвана непосредственно функцией readtable (). , Затем я написал совершенно отдельный тестовый код, чтобы проверить правильность моего подозрения.

Вот мой тестовый код:

a = {"30.03.20","20:36","20.5.44.45";"30.03.20","20:36","text";"30.03.20","20:36","text";"30.03.20","20:36","03/30/20"};
a = cell2table(a)
writetable(a)
opts = detectImportOptions("a.txt");
opts = setvartype(opts,'a1','string');
opts = setvartype(opts,'a2','string');
opts = setvartype(opts,'a3','string');
readtable('a.txt',opts)

С этим тестовым кодом я увидел, что вывод линии readtable('a.txt') действительно не хватало нескольких строк. Я добавлю скриншот с выводами ниже.

Теперь я сузил проблему. Я просто не знаю, как ее решить.

Самая странная часть всего этого заключается в том, что в моих исходных двух кодах у меня есть еще две таблицы, которые пишутся и затем читаются, и они, похоже, не испытывают этого проблема.

В настоящее время я работаю с опциями в объекте deteImportOptions, чтобы посмотреть, смогу ли я решить проблему. Однако, если кто-то испытал это и / или знает, что вызывает функцию readtable (), чтобы пропустить первые три строки моей таблицы, это действительно помогло бы мне.

Это выходные данные как исходной таблицы, так и таблицы, созданной функцией readtable ()

1 Ответ

0 голосов
/ 29 апреля 2020

Вы неправильно установили параметры. Во-первых, конфигурация по умолчанию будет работать, возвращая таблицу ячеек:

readtable('a.txt')

default config

Однако, если вы хотите указать дополнительные опции, используйте правильные настройки :

opts = delimitedTextImportOptions('NumVariables',3,'VariableNamesLine',1,'DataLines',2);

На самом деле, ключевое слово, которое вы ищете, это 'DataLines', указывающее первую строку, где встречаются данные. Другие ключевые слова - хорошая практика - вы просто получите другое наименование столбцов, если пропустите оба ключевых слова 'NumVariables' и 'VariableNamesLine' (первое автоматически нумерует имена столбцов, а второе использует то, что написано в первом ряд ... в твоем случае оба одинаковы). Вы получите тот же результат, что и выше.

Если вы хотите указать конкретный тип данных c, используйте ключ 'VariableTypes':

opts = delimitedTextImportOptions('NumVariables',3,'VariableNamesLine',1,'DataLines',2,'VariableTypes',{'string','string','string'});
readtable('a.txt',opts)

sting-table

Теперь, почему ваш код не работал правильно? Ну, вы не можете обнаружить , в каких строках начинаются данные. Добавление opts.DataLines = 2; в ваш код решает вашу проблему.

...