Jak uchronić Numery przed zniekształcaniem liczb podczas importowania pliku CSV?

12

Kiedy otwieram plik CSV w Numbers, „pomocnie” konwertuje pola, które rozpoznaje jako liczbowe, usuwając zera wiodące, konwertując rzeczy, które rozpoznaje jako daty itp.

Weźmy na przykład kod UPC wpisany do arkusza kalkulacyjnego Numbers 005566778899 , Numbers automatycznie przekonwertuje go na 5566778899 . Nie tego chciałbym ...

Jednak sposób mogę korzystać z numerów, otwierania baz danych z tysięcy kodów UPC z poprzednich zer. Niektóre z nich zawierają również daty, które Numbers również sformatuje. Zasadniczo nie chcę żadnej z tych funkcji, chcę, aby moje treści pozostały same.

Jak mogę sprawić, by Numbers pozostawił moje dane nienaruszone po otwarciu pliku CSV?

Konwersja pól na tekst po zaimportowaniu nie pomoże, ponieważ dane zostały już pomieszane z ...

henryaaron
źródło
Co masz na myśli mówiąc, że „dane zostały już pomieszane”? Czy masz na myśli konwersję na tekst po otwarciu pliku?
Daniel
Po otwarciu pliku zarówno Excel, jak i Numbers zmieniają się wokół wszystkich twoich danych. Więc cokolwiek muszę zrobić, muszę to zrobić, zanim otworzę plik.
henryaaron
7 lat później wydaje się, że to wciąż dziura. Problematyczne jest to, że podróż w obie strony z csv -> Liczby -> csv modyfikuje komórki. Zera wiodące to dobry przykład. Kolejny to procenty (np. 20% staje się 0,2). Kolejnym jest notacja naukowa (np. 1E-2 staje się 0,01). Zawijanie podwójnych cudzysłowów nie pomaga, a przedrostek apostrofem interpretowany jest dosłownie. Myślę, że najlepszą opcją może być poprzedzenie wszystkiego apostrofem przed importem i usunięcie wszystkich początkowych apostrofów po eksporcie ...
Heath Raftery

Odpowiedzi:

7

Jeśli pole w pliku CSV zaczyna się apostrofem ( '), zarówno Excel, jak i Numbers będą traktować to pole jako tekst i nie będą renderować go przy użyciu formatowania numerycznego.

Wygląda na to, że twoje pliki CSV próbują wymusić renderowanie tekstu poprzez zawarcie pól liczb w podwójnych cudzysłowach, ale Numbers i Excel nie wydają się sugerować, że podwójne cudzysłowy powinny być traktowane jako ciągi znaków. Wydaje się, że sztuczka polega na modyfikowaniu plików CSV, tak aby używały sztuczki „zaczyna się od pojedynczego apostrofu” zamiast sztuczki „zawartej w podwójnych cudzysłowach” w przypadku pól numerycznych, ale zachowaj podwójne cudzysłowy w przypadku pól tekstowych zawierających znaki interpunkcyjne (w tym przecinki, cudzysłowy, podziały wierszy itp.).

Aby przetworzyć pliki CSV, aby to zrobić, możesz utworzyć aplikację Automator.

W Automatorze utwórz nową aplikację.

Będzie miał jedną akcję: Uruchom skrypt powłoki (przekazując dane wejściowe jako argumenty). Oto skrypt:

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

Zapisz wynikową aplikację na pulpicie. Upuść wszystkie pliki CSV, których chcesz użyć, w Numbers na ikonie aplikacji, a zostaną one przekonwertowane, dzięki czemu Numery powinny przechowywać liczby w polach jako liczby dosłowne, a nie formatować ich ani wyrzucać informacji.

Wykonaj kopię zapasową danych przed wypróbowaniem tego; możliwe, że szczególnie dziwnie skonstruowany ciąg znaków w polu rekordu mógłby zrzucić wyniki tutaj.

wprowadź opis zdjęcia tutaj

Daniel
źródło
Wykonanie tej pracy wygląda na wymagającą interakcji. Ta dyskusja powinna odbyć się na czacie
Daniel
0

W szczególności oto sposób obsługi zer wiodących . Myślę, że twoje pytanie dotyczy bardziej formatowania komórek niż autokorekty.

Jak wspomniano, sama funkcja autokorekty jest elementem systemowym i należy ją wyłączyć w Preferencjach systemowych.

Adam Eberbach
źródło
Konwersja komórek do tego formatu nie pomoże, ponieważ dane zostały już pomieszane z ...
henryaaron
1
Spodziewałbym się, że zera powrócą, jeśli sformatujesz komórki - jeśli Numbers usuwa destrukcyjnie te zera podczas importu, które naprawdę byłyby do bani. Być może będziesz musiał sformatować komórki przed importem.
Adam Eberbach
Zdecydowanie tak.
henryaaron
0

Huzzah, dzięki tej odpowiedzi i innym, istnieje teraz metoda o następujących zaletach:

  • Działa zarówno w Excelu, jak i liczbach
  • Może być zautomatyzowany.
  • Jest niewidoczny w liczbach.
  • Tworzy pliki CSV o zerowym wpływie od importu do eksportu.

Sztuczka polega na tym, aby nie poprzedzać apostrofem każdego pola ani zawijać podwójnych cudzysłowów, ale poprzedzać ="i sufiksem za pomocą ". Podczas importu Numbers traktuje zawartość pola jako ciąg, a podczas eksportu upuszcza prefiks i sufiks.

Oto przydatna jedna linijka, która wstępnie przetwarza plik o nazwie my.csv:

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

Pierwsze sedumieszcza ="na początku każdej linii, zmienia każdy przecinek na ",=", a następnie kończy każdą linię na ". Drugi sednastępnie usuwa wszystkie puste pola, ponieważ Numbers dławią się na nich. Na koniec zapisuje plik o nazwie, tmp.csvktóry można dwukrotnie kliknąć lub przekazać, openaby zaimportować do Numbers.

W praktyce zepsuje to pola zawierające przecinki. Lepiej jest zawijać tylko te pola, które zaczynają się od liczb, ale wtedy musisz uważać na początek i koniec każdej linii oraz swoją wersję wyrażeń regularnych. To zrobi na macOS:

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

Oznacza to, że dopasuj początek wiersza lub przecinka, cyfrę, a następnie dowolną liczbę znaków, które nie są przecinkami, a następnie koniec wiersza lub inny przecinek. Zamień na ten sam początek i koniec, ale z środkowym bitem owiniętym w ="i ".

Heath Raftery
źródło