Como evito que números sejam desconcertados ao importar um CSV?

12

Quando abro um arquivo CSV no Numbers, ele "ajuda" a converter os campos que reconhece como numéricos eliminando zeros à esquerda, convertendo coisas que reconhece como datas etc.

Por exemplo, se você digitar um código UPC em uma planilha do Numbers 005566778899 , o Numbers o converterá automaticamente em 5566778899 . Não é isso que eu gostaria ...

No entanto, a forma como eu usar números, eu abrir bancos de dados com milhares de códigos UPC com zeros precedentes. Alguns deles também contêm datas em que o Numbers também reformatará. Basicamente, não quero nenhum desses recursos, quero que meu conteúdo seja deixado em paz.

Como faço para que o Numbers deixe meus dados intactos quando abro um arquivo CSV?

A conversão dos campos em texto após a importação não ajudará, pois os dados já foram alterados ...

henryaaron
fonte
Como assim "os dados já foram mexidos"? Você quer dizer converter para texto depois que o arquivo é aberto?
Daniel
Ao abrir o arquivo, o Excel e o Numbers mudarão em torno de todos os seus dados. Então, seja o que for que eu tenho que fazer, eu tenho que fazer isso antes de abrir o arquivo.
henryaaron 21/03
Sete anos depois, isso ainda parece ser um buraco. É problemático que uma ida e volta de csv -> Numbers -> csv modifique as células. Os zeros à esquerda são um bom exemplo. Outra é a porcentagem (por exemplo, 20% se torna 0,2). Outra é a notação científica (por exemplo, 1E-2 se torna 0,01). O agrupamento entre aspas duplas não ajuda, e o prefixo de um apóstrofo é interpretado literalmente. Eu acho que a melhor opção poderia ser a de tudo o prefixo com um apóstrofo antes da importação e tira todos os apóstrofos iniciais após exportação ...
Heath Raftery

Respostas:

7

Se um campo em um arquivo CSV começar com um apóstrofo ( '), o Excel e o Numbers tratarão o campo como texto e não o renderizarão com nenhuma formatação numérica.

Seus arquivos CSV parecem tentar forçar a renderização de texto através dos campos numéricos entre aspas duplas, mas o Numbers e o Excel não parecem entender que números de aspas duplas devem ser tratados como strings. O truque parece ser modificar os arquivos CSV para que eles usem o truque "inicia com um único apóstrofo" em vez do truque "contido em aspas duplas" para campos numéricos, mas mantenha as aspas duplas nos campos de texto que envolvam pontuação (incluindo vírgulas, aspas, quebras de linha etc.).

Para processar seus arquivos CSV para que eles façam isso, você pode criar um aplicativo Automator.

No Automator, crie um novo aplicativo.

Ele terá uma única ação: Execute o Shell Script (passando a entrada como argumentos). Aqui está o script:

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

Salve o aplicativo resultante na sua área de trabalho. Solte todos os arquivos CSV que você deseja usar no Numbers no ícone do aplicativo, e eles serão convertidos para que o Numbers mantenha os números nos campos como números literais e não os formate ou jogue fora as informações.

Faça backup dos seus dados antes de tentar isso; é possível que uma string particularmente estranhamente construída em um campo de registro possa jogar fora os resultados aqui.

insira a descrição da imagem aqui

Daniel
fonte
Fazer com que esse trabalho pareça precisar de alguma interação. É melhor que essa discussão ocorra no chat
Daniel
0

Especificamente, veja como lidar com zeros à esquerda . Acho que sua pergunta é mais sobre formatação de célula do que autocorreção.

Como mencionado, o próprio recurso de correção automática é um item do sistema e precisa ser desativado nas Preferências do Sistema.

Adam Eberbach
fonte
Convertendo as células para este formato não ajuda uma vez que os dados já foi mexido com ...
henryaaron
1
Eu esperava que os zeros voltassem se você formatasse as células - se o Numbers remover destrutivamente esses zeros na importação que seriam realmente ruins. Talvez você precise formatar células antes da importação.
Adam Eberbach
Definitivamente sim.
precisa saber é o seguinte
0

Huzzah, graças a esta resposta e a outras, agora existe um método com os seguintes benefícios:

  • Funciona no Excel e também no Numbers
  • Pode ser automatizado.
  • É invisível em números.
  • Produz arquivos CSV de impacto zero, da importação para a exportação.

O truque é não prefixar cada campo com um apóstrofo nem colocar aspas duplas, mas prefixar com ="e sufixo com ". Na importação do Numbers, o conteúdo do campo é tratado como uma sequência e, na exportação, ele remove o prefixo e o sufixo.

Aqui está um liner útil que pré-processa um arquivo chamado my.csv:

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

O primeiro sedcoloca ="no início de cada linha, muda cada vírgula para ",="e termina cada linha com ". O segundo sedretira todos os campos vazios, porque o Numbers os sufoca. Por fim, ele grava um arquivo chamado tmp.csvque pode ser duplicado ou clicado para openser importado para o Numbers.

Na prática, isso distorce todos os campos que possuem vírgulas. Pode ser melhor apenas agrupar os campos que começam com números, mas é preciso ter cuidado com o início e o final de cada linha e com a versão das expressões regulares. Isso será feito no macOS:

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

Ou seja, combine o início da linha ou uma vírgula, um dígito e, em seguida, qualquer número de caracteres que não sejam vírgulas, depois o final da linha ou outra vírgula. Substitua pelo mesmo começo e fim, mas com a parte intermediária envolvida em ="e ".

Heath Raftery
fonte