Импорт выбранного пользователем CSV-файла. Встроенная ошибка null [дубликат]

Вот несколько способов доступа к родительскому контексту внутри дочернего контекста -
  1. Вы можете использовать функцию bind().
  2. Хранить ссылку на контекст / внутри внутри другой переменной (см. пример ниже).
  3. Использовать функции ES6 Arrow .
  4. Изменить код / function design / architecture - для этого вы должны иметь команду над шаблонами проектирования в javascript.

1. Используйте функцию bind()

function MyConstructor(data, transport) {
    this.data = data;
    transport.on('data', ( function () {
        alert(this.data);
    }).bind(this) );
}
// Mock transport object
var transport = {
    on: function(event, callback) {
        setTimeout(callback, 1000);
    }
};
// called as
var obj = new MyConstructor('foo', transport);

Если вы используете underscore.js - http://underscorejs.org/#bind

transport.on('data', _.bind(function () {
    alert(this.data);
}, this));

2 Сохраните ссылку на контекст / внутри внутри другой переменной

function MyConstructor(data, transport) {
  var self = this;
  this.data = data;
  transport.on('data', function() {
    alert(self.data);
  });
}

3 Функция стрелки

function MyConstructor(data, transport) {
  this.data = data;
  transport.on('data', () => {
    alert(this.data);
  });
}
24
задан Rich Scriven 11 December 2015 в 02:12
поделиться

6 ответов

Ваш CSV может быть закодирован в UTF-16. Это не редкость при работе с некоторыми инструментами на базе Windows.

Вы можете попробовать загрузить UTF-16 CSV следующим образом:

read.csv("mycsv.csv", ..., fileEncoding="UTF-16LE")
33
ответ дан nneonneo 22 August 2018 в 18:13
поделиться
  • 1
    Спасибо, но это не файл ... Я уверен, что я не имею дело с файлом UTF-16LE – user1172468 22 April 2014 в 03:49
  • 2
    @ user1172468: Вы пробовали посмотреть файл в шестнадцатеричном коде? Думаю, что могут быть встроенные NUL. Какая программа сгенерировала ваши CSV? – nneonneo 22 April 2014 в 03:50
  • 3
    Я получил следующее: Предупреждающие сообщения: 1: В read.table (file = file, header = header, sep = sep, quote = quote,: недопустимый вход, найденный при подключении ввода mycsv.csv 2: В read.table ( file = file, header = header, sep = sep, quote = quote,: неполная конечная строка, найденная readTableHeader на 'mycsv.csv' – user1172468 22 April 2014 в 03:51
  • 4
    Я сгенерировал его с помощью opencsv в Java - я уверен, что в файле нет utf-16 символов, но я всегда мог ошибаться – user1172468 22 April 2014 в 03:52
  • 5
    Я не знаю, что такое «UTF-16LE», но это помогло мне! – Outlier 6 January 2016 в 12:59

Это не связано с кодировкой. Это проблема с чтением нулей в файле. Для этого вам необходимо передать параметр «skipNul = TRUE».

например: neg = scan ('F: /Natural_Language_Processing/negative-words.txt', what = 'character', comment .char = '', encoding = "UTF-8", skipNul = TRUE)

0
ответ дан Naveen Kumar 22 August 2018 в 18:13
поделиться

В таких случаях убедитесь, что данные, которые вы импортируете, не имеют символов «#», но если этот случай попытается использовать параметр comment.char="". Это сработало для меня.

0
ответ дан Phill 22 August 2018 в 18:13
поделиться

Вы можете попробовать использовать опцию skipNul = TRUE.

mydata = read.csv("mycsv.csv", quote = "\"", skipNul = TRUE)

Из ?read.csv

Встроенные nuls во входном потоке завершат текущее чтение поля , с предупреждением один раз за вызов для сканирования. Установка skipNul = TRUE заставляет их игнорировать.

Это сработало для меня.

26
ответ дан Rich Scriven 22 August 2018 в 18:13
поделиться
  • 1
    @Richard, @Apex или кто-то, не могли бы вы указать мне на ресурс или 1) определить "embedded nul" и 2) более подробно объяснить, что делает skipNul = TRUE? Благодарю. – Daniel Fletcher 24 April 2016 в 03:01
  • 2
    Null - это значение ASCII 0 (Hx0), называемое NUL или null (проверьте любую таблицу ASCII). A (управляемая или преобразованная) строка может содержать эти символы. Иногда они отображаются как \0, как в ABC\0EFG. SkipNul = TRUE игнорирует их. – Enzo 25 April 2016 в 07:23
  • 3
    @Enzo благодарит за отзыв. Я предполагаю, что R считает, что внедренные нули должны стать NA s; однако, поскольку аргумент для na.strings = <input> неясен или недостаточен для преобразования встроенных нулей all в NA s, R оставляет остатки в виде текстовых строк с их исходным значением. Верный? Если да, то можно ли определить, какие точки данных R игнорируются как внедренные нули? (Цель состоит в том, чтобы преобразовать их в NA s.) Спасибо, снова. – Daniel Fletcher 25 April 2016 в 18:23

У меня было такое же сообщение об ошибке, и выяснилось, что хотя мои файлы имеют расширения .csv и открываются без проблем в электронной таблице, они были фактически сохранены как «Все форматы», а не ¨Text CSV (.csv) ¨

1
ответ дан SCallan 22 August 2018 в 18:13
поделиться

Может быть файл, который не имеет CRLF, может иметь только LF. Попробуйте проверить вывод HEX файла.

Если это так. Попробуйте запустить файл через awk:

awk '{printf "%s\r\n", $0}' file > new_log_file
2
ответ дан steinmb 22 August 2018 в 18:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: