У меня есть файл CSV с именем штрих-код, я успешно импортировал этот файл в свою базу данных SQLite, но проблема в том, что данные сохраняются в том виде, в котором они есть в файле CSV.
Данные, которые я получаю: 8.90103E+12, данные, которые я хотел: 8901030382253.
Пример:
ТОВАР – EAN_CODE
100047253 - 8.90103E+12
100047252 - 8.90103E+12
У меня есть два столбца, данные в Ean_code не попадают в мою базу данных.
Я использовал функцию обрезки, но o/p остается прежним.
Мой код:
if (exportDir.exists()) {
FileReader file = null;
try {
file = new FileReader(exportDir);
BufferedReader buffer = new BufferedReader(file);
String line = "";
int iteration = 0;
ArrayList<MasterDataModel2> arrayList_stock2 = new ArrayList<>();
while ((line = buffer.readLine()) != null) {
if (iteration == 0) {
iteration++;
continue;
}
//StringBuilder sb = new StringBuilder();
String[] str = line.split(",");
arrayList_stock2.add(new MasterDataModel2(str[0].replace("\"", ""), str[1].replace("\"", "")));
//arrayList_stock2.add(new MasterDataModel2(str[0],str[1]));
Log.d("insertTotal", "Msg:" + lastId);
}
Log.e("size",String.valueOf(arrayList_stock2.size()));
db.addAllMasterData2(arrayList_stock2);
} catch (FileNotFoundException e) {
e.printStackTrace();
//CallingImportantMethod.showToast(this, "File is not available");
} catch (IOException e) {
e.printStackTrace();
//CallingImportantMethod.showToast(this, "Something wents wrong");
}
}
No sir ean_code не имеет общего формата, например: 8.90103E+12 на самом деле ->8901071354103.
Хорошо. поэтому ваши значения в csv разделены запятыми или разделены новой строкой. Потому что я не понимаю, почему вы разделяете строки запятыми. Будет лучше, если вы выложите небольшой пример того, как данные находятся в самом csv.
Сэр, он не разделен запятой, но при открытии в блокноте он показывает разделенные запятой.
Не могли бы вы добавить скриншот файла csv. Если он большой, подойдет и небольшая его часть.
да, сэр, вот оно: drive.google.com/file/d/1vD_YiI5K88l_adQ9-Ark5oQWIRNPqNjk/…




Этот код ниже неверен.
arrayList_stock2.add(new MasterDataModel2(str[0].replace("\"", ""), str[1].replace("\"", "")));
\ — это специальный escape-символ, поэтому вам нужно \\, чтобы избежать его. Несмотря на то, что это не связано с исходной проблемой, рекомендуем вам прочитать это, чтобы иметь четкое представление об использовании обратной косой черты в java.
Итак, вернемся к проблеме, я думаю, вам действительно не нужно вызывать str[].replace(). Поправьте меня, если я ошибаюсь.
arrayList_stock2.add(new MasterDataModel2(str[0].trim(), str[1].trim()));
Я думаю, что приведенного выше сегмента кода будет достаточно.
Обновлено: для вашей реальной проблемы вы можете использовать ниже. Чтобы избежать нулевых проблем, вам также может потребоваться проверить это.
if (str[1] != null) {
Double eanCodeDouble = Double.parseDouble(str[1]);
NumberFormat nf = NumberFormat.getInstance();
String eanCodeString = nf.format(eanCodeDouble);
System.out.println(resultedString);
} else {
String eanCodeString = '';
}
if (str[0] == null) {
str[0] = '';
}
arrayList_stock2.add(new MasterDataModel2(str[0].trim(), eanCodeString));
Брат, я использовал эту функцию обрезки, как я уже упоминал в своей проблеме, все еще получая тот же результат.
Что вы подразумеваете под "правильным". Четко упомяните, как данные, которые вы хотите сохранить, и как они на самом деле сохраняются сейчас?
Данные, которые я получаю: 8.90103E+12, данные, которые я хотел: 8901030382253.
Ах я вижу. Итак, вы хотите сохранить EAN_CODE в числовом формате, даже если они считываются из csv в научном формате. Я обновил ответ. Я думаю, это может решить вашу проблему. Просто обновите меня, если что-то не так.
Спасибо за ваши усилия, но я получаю это сейчас: Вызвано: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 не знаю, что делать.. Я решил ошибку, но все еще получаю тот же o/p, брат...
Рад, что это помогло.
брат еще раз спасибо! все работает нормально, но когда ячейки пусты, приложение вылетает, показывая: исключение пустой строки. Как это решить плиз..
Да. Это из-за split(). Его нельзя вызывать для нулевых значений. Ячейки пусты означает, что строка пуста. Таким образом, вызов метода split() для нулей вызовет исключение. Чтобы избежать этого, вы должны проверить, является ли строка нулевой или нет, прежде чем остальная часть кода будет выполнена.
Братан, это мой код: String[] str = line.split(","); String[] str2 = line.split(","); Двойной eanCodeDouble = Double.parseDouble(str2[0]); NumberFormat nf = NumberFormat.getInstance(); Строка eanCodeString = nf.format(eanCodeDouble); arrayList_stock2.add(новый MasterDataModel2(String.valueOf(eanCodeString).replaceAll(",","")),String.valueOf(str[1]).replaceAll("\"","")) ); вы можете мне снова помочь???
почему вы разделяете «линию» дважды. str и str2 получат одинаковый результат?
да, я знаю, я просто хочу разделить их, чтобы было легче понять. str для позиции «0», а str2 для позиции «1».
Я обновил ответ. Пожалуйста, обратитесь к нему в качестве примера. Это может не совсем решить вашу проблему. Но что-то вдоль этого будет делать.
ты мне уже очень помог ..попробую ..добрый день приятель!! Спасибо..
Имеет ли этот EAN_CODE какое-либо значение в значении. Потому что E+12 означает, что в экспоненциальном представлении это равно 10^12. Поэтому, если точное значение важно, может быть не очень хорошей идеей просто отбросить обозначение, а преобразовать его в нормальный формат, а затем сохранить.