[RUBY] Beim Importieren von CSV mit Rails war es wirklich einfach, den Befehl nkf zu verwenden

Beim Importieren einer CSV-Datei mit Rails habe ich sie so implementiert.

def read_csv
  begin
    rows = CSV.read(file, encoding: 'UTF-8')
  rescue CSV::MalformedCSVError
    begin
      #CSV-Datei ist UTF-Schalten Sie, wenn nicht 8_Lesen Sie in JIS
      rows = CSV.read(file, encoding: 'Shift_JIS')
    rescue CSV::MalformedCSVError, Encoding::InvalidByteSequenceError, Encoding::UndefinedConversionError
        #CSV-Datei ist UTF-8 ・ Schicht_Wenn es nicht JIS ist
        @error = 'Die Dateicodierung ist UTF-8 oder Shift_Es ist nicht JIS.'
    end
  end
  rows&.shift #Entfernen Sie den Header
  rows
end

Problem

Es gibt viele Ausnahmen, was problematisch ist, und es gibt nur zwei Zeichencodes, die überhaupt importiert werden können ...

Lösung

Anscheinend kann alles mit einem Modul namens "nkf" konvertiert werden ... https://docs.ruby-lang.org/ja/latest/class/NKF.html

--Installieren Sie nkf auf Ihrem PC

brew install nkf
nkf -w --Überschreiben Sie den Pfad der Datei, die Sie konvertieren möchten

Sie können diesen Befehl verwenden, um ihn in ein gutes Gefühl umzuwandeln.

def read_csv(file)
  system("nkf -w --overwrite #{file.path}")
  rows = CSV.read(file)
  rows&.shift #Entfernen Sie die Kopfzeile in der ersten Zeile
  rows
end

Der Code ist sauber.

wichtiger Punkt

Bitte beachten Sie, dass der Befehl nkf nur verwendet werden kann, wenn nkf zuvor mit dem Befehl Brew install nkf usw. installiert wurde.

Recommended Posts

Beim Importieren von CSV mit Rails war es wirklich einfach, den Befehl nkf zu verwenden
Da der Befehl du, der bei voller Kapazität verwendet wird, schwierig zu verwenden ist, habe ich versucht, ihn mit Rubin zu umwickeln
Warum kann ich den mit gem installierten Befehl Rails verwenden? ??
Was tun, wenn der Befehl Rails unbrauchbar wird?
Wovon ich süchtig war, als ich die Google-Authentifizierung mit Rails implementierte
Wenn ein Anfänger eine persönliche App mit Schienen erstellt, muss das Verfahren trotzdem zum Startpunkt gebracht werden.
Ist es für den Benutzer einfach, Allzweckfunktionen zu implementieren? Seien wir uns dessen bewusst
Wenn Sie mit dem Befehl "Rails Generate Migration" eine Spalte vom Typ "String" mit begrenzter Länge hinzufügen möchten
[Rails] Ich war süchtig nach den Nginx-Einstellungen, als ich Action Cable verwendete.
Probleme, denen ich beim Erstellen der Digdag-Umgebung mit Docker verfallen war
Machen Sie Firebase Analytics einfach und benutzerfreundlich mit Singleton- und Builder-Mustern
[Rails] Wenn ich form_with benutze, friert der Bildschirm ein! ??
Wenn Sie die Methode außerhalb verwenden möchten
Super einfache Möglichkeit, Enum mit JSP zu verwenden
Versuchen Sie, das gemeinsame Layout mit Schienen zusammenzufassen
Mit Rails + Docker einfach Hallo Welt anzuzeigen
So löschen Sie den dem Benutzer zugeordneten Tweet, wenn Sie ihn gleichzeitig löschen
[Rails] Lösung, wenn bei Verwendung von Capybara mit Rspec der Fehler "undefined method` visit '" angezeigt wird
Eine Warnung wird angezeigt, wenn versucht wird, eine große Ganzzahl mit den speziellen Variablen $ 1, $ 2, $ 3 ... zu verwenden.
Zusammenfassung der Verwendung des im IE festgelegten Proxy-Sets bei der Verbindung mit Java
Begrenzen Sie Dateien, die mit dem Befehl Rails g Controller erstellt wurden
[Rails] Ich weiß nicht, wie ich das Modell verwenden soll ...
Süchtig nach dem Webpacker, der standardmäßig mit Rails 6 geliefert wird
Nachdem ich einen Artikel mit Rails Simple Calendar veröffentlicht habe, möchte ich ihn im Kalender wiedergeben.
Als ich versuchte, mit JScrollBar automatisch zu scrollen, wurde der Ereignishandler nur einmal gezeichnet.
Als ich versuchte, Azure Kinect DK mit Docker auszuführen, wurde es von EULA blockiert
[Schienen] Was tun, wenn die Ansicht zusammenbricht, wenn eine Nachricht mit der Fehlermethode angezeigt wird?
Session war ein Cookie, das beim Schließen des Browsers gelöscht werden sollte, und eine Methode zum Austauschen: Rails Tutorial Hinweis - Was ist eine Rails-Sitzung?