Как другие выше, я не знаю любой-шаг способ сделать это, но если бы Вы готовы пользоваться очень простыми внешними библиотеками, я предложил бы:
OpenCsv для парсинга CSV (маленький, простой, надежный и простой в использовании)
Xstream для анализирования/сериализирования XML (очень очень простой в использовании, и создание полностью человекочитаемого xml)
Используя те же демонстрационные данные как выше код был бы похож:
package fr.megiste.test;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import au.com.bytecode.opencsv.CSVReader;
import com.thoughtworks.xstream.XStream;
public class CsvToXml {
public static void main(String[] args) {
String startFile = "./startData.csv";
String outFile = "./outData.xml";
try {
CSVReader reader = new CSVReader(new FileReader(startFile));
String[] line = null;
String[] header = reader.readNext();
List out = new ArrayList();
while((line = reader.readNext())!=null){
List item = new ArrayList();
for (int i = 0; i < header.length; i++) {
String[] keyVal = new String[2];
String string = header[i];
String val = line[i];
keyVal[0] = string;
keyVal[1] = val;
item.add(keyVal);
}
out.add(item);
}
XStream xstream = new XStream();
xstream.toXML(out, new FileWriter(outFile,false));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Приведение к следующему результату: (Xstream позволяет очень точно настраивающий из результата...)
string
hello world
float1
1.0
float2
3.3
integer
4
string
goodbye world
float1
1e9
float2
-3.3
integer
45
string
hello again
float1
-1
float2
23.33
integer
456
string
hello world 3
float1
1.40
float2
34.83
integer
4999
string
hello 2 world
float1
9981.05
float2
43.33
integer
444
Язык COBOL был разработан в 1950-х годах, чтобы соответствовать возможностям доступных медленных машин с ограниченным ОЗУ. в то время. Не говоря уже об отсутствии интерактивных терминалов. Многие аспекты дизайна упрощены для компиляции в простой машинный код без необходимости оптимизации. Например, нет переменных. Только один блок рабочей памяти с именами, которые относятся к массивам байтов определенной фиксированной длины, начиная с фиксированного местоположения. Программы COBOL компилируются в эффективный машинный код по дизайну.
По мере того, как процессоры становились быстрее, а ОЗУ становилось больше, компиляторы COBOL добавляли новые функции, такие как индексированный по ключу ввод-вывод файлов и встроенный алгоритм MERGE, а также поддержку интерактивных текстовых терминалов. . В настоящее время существует даже объектно-ориентированный COBOL.
Таким образом, отчасти причина заключается в том, что код был переносимым на новые архитектуры ЦП, поскольку это был язык высокого уровня, но при этом очень эффективен, поскольку он был разработан, чтобы не использовать причудливые функции, подобные тем, которые были найдены в Алголе-60, предке C. Частично причина в том, что COBOL эволюционировал, чтобы приспособиться к более новым операционным системам и возможностям. Например, базы данных SQL - это просто более сложные формы простых таблично-ориентированных файлов, для обработки которых был разработан COBOL. Компоновщики оверлеев позволяли писать огромные программы на COBOL, пока поток выполнения был примерно последовательным. Любая функция, которая была лучше реализована на Ассемблере, PL / 1 или FORTRAN, могла быть доступна через вызовы PROCEDURE.
Ближайшим современным языком к COBOL является Python, потому что вы можете писать чистые программы, которые читаются почти как английский, без лишних знаков препинания. но вы можете использовать большую и сложную библиотеку функций вместо того, чтобы постоянно кодировать свои собственные. Конечно, Python перенял все возможности ALGOL-60 и другие, потому что он был разработан в современную эпоху, когда вам не нужно помещать все в 16 КБ ОЗУ.
Это потому, что программы COBOL (по крайней мере, старые) очень просто структурированы, поэтому их совсем не сложно скомпилировать в эффективный машинный код. Например, «старые добрые» программы на коболе не нуждаются в эффективном управлении памятью, потому что динамического выделения памяти просто не происходит; структура памяти фиксируется во время компиляции.
Еще один аргумент в пользу COBOL в финансовых условиях - это то, что он предоставляет собственные типы данных и математические операторы для выполнения десятичной арифметики с фиксированной запятой (см .: [Packed Decimal] [1]).
Packed Decimal полезен для выполнения финансовых вычислений, так как поддерживает фиксированное количество цифр до и после десятичной точки. Это немного упрощает округление финансовых сумм.
Некоторые языки, кроме COBOL, PL / 1 и Algol, могут эффективно выполнять арифметические операции с десятичной фиксированной точкой. У мэйнфреймов IBM есть выделенные аппаратные схемы для выполнения вычислений в BCD, что помогает поддерживать производительность COBOL где-то в стратосфере.
[1]: http://en.wikipedia.org/wiki/Packed_decimal «Упакованное десятичное число»
В OS / 360 и ее потомках было соотношение примерно четырех инструкций сборки к команде COBOL, разработчики оборудования внимательно изучили спецификацию COBOL и создали набор инструкций для ее поддержки. .
Даже такие, казалось бы, чудовищные состояния, как: -
PERFORM BEGIN-PARA THROUGH END-PARA VARYING I FROM 1 BY 2 TO MAX_ARRAY.
Переводит примерно в восемь ассемблерных инструкций (только 1 из которых находится внутри цикла)