better error with very long fields in import (#852)

This commit is contained in:
Damien Elmes 2013-05-14 18:38:35 +09:00
parent 7ca86e2dd7
commit f7c5003c1c

View file

@ -2,10 +2,14 @@
# Copyright: Damien Elmes <anki@ichi2.net> # Copyright: Damien Elmes <anki@ichi2.net>
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import codecs, csv, re import codecs
import csv
import re
from anki.importing.noteimp import NoteImporter, ForeignNote from anki.importing.noteimp import NoteImporter, ForeignNote
from anki.lang import _ from anki.lang import _
class TextImporter(NoteImporter): class TextImporter(NoteImporter):
needDelimiter = True needDelimiter = True
@ -29,21 +33,24 @@ class TextImporter(NoteImporter):
reader = csv.reader(self.data, delimiter=self.delimiter, doublequote=True) reader = csv.reader(self.data, delimiter=self.delimiter, doublequote=True)
else: else:
reader = csv.reader(self.data, self.dialect, doublequote=True) reader = csv.reader(self.data, self.dialect, doublequote=True)
for row in reader: try:
row = [unicode(x, "utf-8") for x in row] for row in reader:
if len(row) != self.numFields: row = [unicode(x, "utf-8") for x in row]
if row: if len(row) != self.numFields:
log.append(_( if row:
"'%(row)s' had %(num1)d fields, " log.append(_(
"expected %(num2)d") % { "'%(row)s' had %(num1)d fields, "
"row": u" ".join(row), "expected %(num2)d") % {
"num1": len(row), "row": u" ".join(row),
"num2": self.numFields, "num1": len(row),
}) "num2": self.numFields,
ignored += 1 })
continue ignored += 1
note = self.noteFromFields(row) continue
notes.append(note) note = self.noteFromFields(row)
notes.append(note)
except (csv.Error), e:
log.append(_("Aborted: %s") % str(e))
self.log = log self.log = log
self.ignored = ignored self.ignored = ignored
self.fileobj.close() self.fileobj.close()