Как удалить беспризорные ^M и <96> из текстового файла перед импортом в sas

Я получаю текстовый файл с разделителями по конвейеру от пользователя, который заполняет электронную таблицу Excel с использованием скриншотов экрана, поэтому данные беспорядочные. Это полно случайных ^M (carriage returns) а также <96> (windows en dash) в результате чего импорт будет неполным.

Я попробовал dos2unix, и я получаю сообщение об ошибке, что была проблема с преобразованием. Я удалил все ^M с помощью этого решения я нашел на этом сайте:

tr -d '\r' < infile > outfile

<96> персонажи остаются. Что было бы сопоставимым '/r' за эти тире? Или, может быть, есть лучшее решение? Я бы на самом деле хотел бы заменить "плохие" тире на "хорошие" тире, если это возможно.

1 ответ

Почему бы просто не очистить файл с помощью SAS? Если ваши строки короче, чем 32 767 символов, это будет просто.

data _null_;
  infile 'input-file' termstr=LF ;
  file 'output-file' termstr=LF ;
  input;
  _infile_=translate(compress(_infile_,'0D'x),'-','96'x);
  put _infile_;
run;

Если строки длиннее, вы можете прочитать поле данных по полю и вместо этого исправить это.

Вы можете получить восьмеричное значение с помощью команды cat file.txt | od и удалите его с помощью tr точно так же, как и с символами ^M.

Другие вопросы по тегам