Как сохранить номера от искажающих номеров при импорте CSV?

12

Когда я открываю файл CSV в Numbers, он «услужливо» преобразует поля, которые он распознает, в числовые, удаляя начальные нули, преобразовывая вещи, которые он распознает как даты, и т. Д.

Например, вы вводите код UPC в таблицу Numbers 005566778899 , Numbers автоматически преобразует его в 5566778899 . Это не то, что я хотел бы ...

Однако, как я использую Numbers, я открываю базы данных с тысячами кодов UPC с предшествующими нулями. Некоторые из них также содержат даты, которые числа также переформатируют. По сути, я не хочу ни одной из этих функций, я хочу, чтобы мой контент оставался один.

Как я могу получить Numbers, чтобы оставить мои данные нетронутыми при открытии файла CSV?

Преобразование полей в текст после импорта не поможет, так как данные уже были испорчены ...

henryaaron
источник
Что вы имеете в виду "данные уже были испорчены"? Вы имеете в виду преобразование в текст после открытия файла?
Даниил
После открытия файла Excel и Numbers изменят все ваши данные. Итак, что бы я ни делал, я должен сделать это прежде, чем открыть файл.
Генриарон
7 лет спустя это все еще кажется зияющей дырой. Проблематично, что обратное путешествие из csv -> Numbers -> csv изменяет ячейки. Ведущие нули - хороший пример. Еще один процент (например, 20% становится 0,2). Еще одна научная нотация (например, 1E-2 становится 0,01). Заключение в двойные кавычки не помогает, а префикс с апострофом интерпретируется буквально. Я думаю, что лучшим вариантом может быть префикс перед апострофом перед импортом и удаление всех начальных апострофов после экспорта ...
Heath Raftery

Ответы:

7

Если поле в CSV-файле начинается с апострофа ( '), и Excel, и Numbers будут обрабатывать это поле как текст, а не отображать его в цифровом формате.

Ваши CSV-файлы, по-видимому, пытаются форсировать рендеринг текста через заключенные в двойные кавычки числовые поля, но Numbers и Excel, похоже, не понимают, что числа в двойных кавычках следует рассматривать как строки. Хитрость заключается в том, чтобы модифицировать файлы CSV, чтобы они использовали трюк «начинается с одного апострофа», а не трюк «содержался в двойных кавычках» для числовых полей, но оставляли двойные кавычки для текстовых полей, включая пунктуацию (включая запятые, кавычки, переносы строк и т. д.).

Чтобы обработать ваши CSV-файлы и сделать это, вы можете создать приложение Automator.

В Automator создайте новое приложение.

У него будет одно действие: Run Shell Script (передача ввода в качестве аргументов). Вот сценарий:

for f in "$@"
do
    perl -pi -e "s/\"\"([0-9A-Za-z: \.\-+]+)\"/'\1/g" "$f"
done

Сохраните полученное приложение на рабочем столе. Удалите все CSV-файлы, которые вы хотите использовать в Numbers, на значке приложения, и они будут преобразованы, поэтому Numbers должны сохранять числа в полях в виде буквенных чисел, а не форматировать их или выбрасывать информацию.

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

введите описание изображения здесь

Даниэль
источник
Чтобы эта работа выглядела так, как будто она нуждается во взаимодействии. Это обсуждение лучше провести в чате
Даниэль
0

В частности, вот как обращаться с ведущими нулями . Я думаю, что ваш вопрос больше касается форматирования ячеек, чем автозамены.

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

Адам Эбербах
источник
Преобразование ячеек в этот формат не поможет, поскольку данные уже были испорчены ...
Генриарон
1
Я ожидал, что нули вернутся, если вы отформатируете ячейки - если Numbers действительно удалит те нули при импорте, которые действительно отстой. Возможно, вам придется форматировать ячейки перед импортом.
Адам Эбербах
Это определенно делает.
Генриарон
0

Huzzah, благодаря этому ответу и другим, теперь есть метод со следующими преимуществами:

  • Работает в Excel, а также Numbers
  • Может быть автоматизирован.
  • Невидим в цифрах.
  • Создает файлы CSV с нулевым эффектом от импорта к экспорту.

Хитрость заключается в том, чтобы не ставить перед каждым полем апостроф и не заключать в двойные кавычки, а ставить префикс ="и суффикс с ". При импорте Numbers обрабатывает содержимое поля как строку, а при экспорте удаляет префикс и суффикс.

Вот удобный вкладыш, который предварительно обрабатывает файл с именем my.csv:

sed 's/^/="/;s/,/",="/g;s/$/"/' my.csv | sed 's/=""//g' > tmp.csv

Первый sedставит ="в начале каждой строки, меняет каждую запятую на ",=", затем заканчивает каждую строку с ". Второй sedзатем удаляет все пустые поля, потому что числа задыхаются от них. Наконец, он записывает файл с именем, tmp.csvкоторый можно дважды щелкнуть или передать openдля импорта в Numbers.

На практике это искажает любые поля, в которых есть запятые. Возможно, вам лучше обернуть только те поля, которые начинаются с цифр, но тогда вам нужно быть осторожным с началом и концом каждой строки и вашей версией регулярных выражений. Это будет делать в macOS:

sed -E 's/(^|,)([[:digit:]][^,]*)($|,)/\1="\2"\3/g'

То есть, сопоставьте начало строки или запятую, цифру, а затем любое количество символов, которые не являются запятыми, затем конец строки или другую запятую. Заменить на то же начало и конец, но со средним битом, завернутым в ="и ".

Хит Рафтери
источник