2011-01-08 161 views
1

基本上我从Joomla Virtuemart导出了一个csv文件。任务是将每一行的货币兑换成新货币。我们有EEKs(爱沙尼亚克朗)在使用,但从那一年起,我们兑欧元(欧元),货币比EEKs大15.64664倍。因此,我必须将每一行的旧价格与15.64664分开,以将其转换为欧元,然后输出文件,就像以前一样,但知道价格已更改。用于更改csv格式文件中每行的特定值的Java代码

基本上我的想法是采取价格,把它们放在一个单独的数组中,将它们除以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文件读取数据。

如果有人能指出我正确的方向,我将不胜感激。 :)

回答

2

我会逐行读取文件,然后使用正则表达式来获得价格,进行计算并用新的价格将该行写回到另一个文件。

必须是java吗?虽然这可以很容易地用Java来完成,但是perl/ruby​​和python在这些方面更好(至少少量代码行)。

3

您可以试试OpenCSV库。他们也在他们的网站上有示例代码。

3

您可以在Microsoft Excel或任何其他电子表格程序中导入文件,然后使用公式在新列或同一列中进行更改,然后将其导出为CSV文件。

这应该很快。