Java-код для изменения определенного значения в каждой строке в файле формата CSV - PullRequest
1 голос
/ 08 января 2011

В основном я экспортировал CSV-файл из Joomla Virtuemart. Задача - конвертировать валюту в каждой строке в новую валюту. Мы использовали EEK (эстонские кроны), но с этого года мы перешли на евро (евро), валюта которого в 15,64664 раза больше, чем EEK. Поэтому мне нужно разделить старую цену в каждой строке на 15.64664, чтобы преобразовать ее в евро, а затем вывести файлы, как это было раньше, но знать, что цены изменились.

По сути, я думал о том, чтобы взять цены, поместить их в отдельный массив, разделить их на 15.64664 и затем записать новые значения обратно в строки формата csv в нужном месте.

Файл выглядит следующим образом (здесь три отдельные строки):

~product_sku~^~product_parent_sku~^~category_path~^~product_name~^~product_s_desc~^~product_desc~^~product_price~^~product_full_image~^~product_thumb_image~^~product_availability~^~product_available_date~^~product_currency~^~product_discount~^~product_discount_date_end~^~product_discount_date_start~^~product_packaging~^~product_publish~^~product_special~^~product_tax~
~000358~^~~^~IT SEADMED (tellimisel)/Computing/PC Components/PSU~^~Codegen power supply ATX PSU 350W V2.03 P4 CE PFC PSU (SILENT/ 1~^~~^~Codegen power supply ATX PSU 350W V2.03 P4 CE PFC PSU (SILENT/ 12cm fan)~^~43.33~^~http://s3.acme.lt/products/000358/photos/large/1.jpg~^~http://s3.acme.lt/products/000358/photos/small/1.png~^~~^~13/10/2010 00:00:00~^~EUR~^~~^~~^~~^~0~^~Y~^~~^~20.00~
~000390~^~~^~IT SEADMED (tellimisel)/Computing/Peripherals/Keyboards~^~Chicony multimedia keyboard KU-0420, LT/RUS, USB, 17 multimedia ~^~~^~Chicony multimedia keyboard KU-0420, LT/RUS, USB, 17 multimedia hotkeys, slim shape design, thin keycaps, silver/black~^~27.50~^~http://s3.acme.lt/products/000390/photos/large/1.jpg~^~http://s3.acme.lt/products/000390/photos/small/1.png~^~~^~~^~EUR~^~~^~~^~~^~0~^~Y~^~~^~20.00~

Первая строка - это имена полей с разделителями имен (~) и разделителями полей (^). Как видите, цена находится на седьмом месте названий полей. Можно ли написать код Java, который принимает значение цены (начиная со второй строки, без разделителей полей и имен), помещает его в массив. Затем каждое значение в этом массиве делится на 15.64664, и после этого старые ценовые значения заменяются новыми разделенными и отформатированными (с двумя десятичными разрядами) значениями?

Данные могут быть прочитаны из файла .txt или .csv, если это имеет значение.

Буду признателен, если кто-нибудь укажет мне правильное направление. :)

Ответы [ 3 ]

3 голосов
/ 08 января 2011

Вы можете попробовать OpenCSV библиотека. У них также есть пример кода на их сайте.

3 голосов
/ 08 января 2011

Вы можете импортировать файл в Microsoft Excel или любую другую программу Spread Sheet, а затем использовать формулу, чтобы внести изменения в новый столбец или тот же столбец, а затем экспортировать его как файл CSV.

Этодолжно быть довольно быстро

2 голосов
/ 08 января 2011

Я читаю файл построчно, затем использую регулярное выражение, чтобы добраться до цены, выполняю вычисления и записываю строку в другой файл с новой ценой.

Должно быть, это java?Хотя это легко сделать в Java, perl / ruby ​​и python намного лучше справляются с этими задачами (по крайней мере, меньше строк кода).

...