Для большого улучшения производительности, альтернативой может быть использование substring()
в цикле:
public String[] splitStringEvery(String s, int interval) {
int arrayLength = (int) Math.ceil(((s.length() / (double)interval)));
String[] result = new String[arrayLength];
int j = 0;
int lastIndex = result.length - 1;
for (int i = 0; i < lastIndex; i++) {
result[i] = s.substring(j, j + interval);
j += interval;
} //Add the last bit
result[lastIndex] = s.substring(j);
return result;
}
Пример:
Input: String st = "1231241251341351452342352456"
Output: 123 124 125 134 135 145 234 235 245 6.
Это не так коротко, как решение Stevevls , но это намного эффективнее (см. ниже), и я думаю, что в будущем это будет легче отрегулировать, конечно, в зависимости от вашей ситуации.
2000 символов длинная строка - интервал составляет 3 .
split("(?<=\\G.{" + count + "})")
производительность (в миллисекундах):
7, 7, 5, 5, 4, 3, 3, 2, 2, 2
splitStringEvery()
(substring()
) производительность (в миллисекундах):
2, 0, 0, 0, 0, 1, 0, 1, 0, 0
2 000 000 символов длинная строка - интервал составляет 3 .
split()
производительность (в миллисекундах):
207, 95, 376, 87, 97, 83, 83, 82, 81, 83
splitStringEvery()
производительность (в миллисекундах):
44, 20, 13, 24, 13, 26, 12, 38, 12, 13
2 000 000 символов длинная строка - интервал составляет 30 .
split()
производительность (в миллисекундах):
103, 61, 41, 55, 43, 44, 49, 47, 47, 45
splitStringEvery()
производительность (в миллисекундах):
7, 7, 2, 5, 1, 3, 4, 4, 2, 1
Вывод:
Метод splitStringEvery()
намного быстрее (даже после изменений в Java 7u6 ), и он обостряется, когда интервалы становятся выше ].
Готовый к использованию тестовый код:
Используйте сценарий Perl. Использование модуля Perl Spreadsheet :: ParseExcel из CPAN для анализа файла xls с последующим выводом, поскольку csv должно работать нормально.
http://search.cpan.org/dist/Spreadsheet-ParseExcel
Вы также можете попробовать использовать VBScript.
В мире Java вы можете использовать apache poi. Вы можете начать со следующего фрагмента кода Groovy.
FileInputStream fis = new FileInputStream(filename);
Workbook wb = new HSSFWorkbook(fis);
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
doSomething(cell.toString())
}
}
Используйте одну из переносимых библиотек [Python]:
pyxlreader.sourceforge.net/
sourceforge.net/projects/pyexcelerator
и создайте дополнительный слой сценария на наверху.
Excel можно использовать в качестве источника данных, и существуют драйверы для доступа к EXCEL как к базе данных.
1.) Создайте и откройте соединение с файлом EXCEL, который вы хотите преобразовать в CSV.
2.) Выполните запрос типа «SELECT * From Sheet1», который загрузит все данные Sheet1 в набор записей или в datatable.
3.) Поскольку я использую .net, я могу хранить эти записи на datatable и преобразовать в CSV с помощью следующего метода расширения.
public static string ToCSV(this DataTable _dataTable)
{
StringBuilder csv = new StringBuilder();
StringWriter sw = new StringWriter(csv);
int icolcount = _dataTable.Columns.Count;
for (int i = 0; i < icolcount; i++)
{
sw.Write(_dataTable.Columns[i]);
if (i < icolcount - 1)
{
sw.Write(",");
}
}
sw.Write(sw.NewLine);
foreach (DataRow drow in _dataTable.Rows)
{
for (int i = 0; i < icolcount; i++)
{
if (!Convert.IsDBNull(drow[i]))
{
sw.Write(drow[i].ToString());
}
if (i < icolcount - 1)
{
sw.Write(",");
}
}
sw.Write(sw.NewLine);
}
sw.Close();
return csv.ToString();
}
Вы можете применить этот подход к платформа, над которой вы работаете.
Спасибо.
Рекомендовать конвертировать XLS: http://www.softinterface.com/Convert-XLS%5CConvert-XLS.htm
«Конвертировать XLS» - это простая в использовании, но сложная утилита конвертера Excel, специально разработанная для Excel, текста и CSV (символьный / через запятую) файлы. Если вам нужно преобразовать / манипулировать одним или тысячами файлов, расположенных в одной или нескольких папках, это инструмент! Преобразование можно выполнять в 10-15 раз быстрее без MS Excel.
Автоматизируйте задачи преобразования Excel с помощью:
Если у вас есть Cygwin, скорее всего, у вас будет Python. Если нет - установите python и используйте этот скрипт . Это намного больше, чем вам нужно, но преобразование выполняется легко и быстро.
@ Джон Мачин: Я не могу добавить комментарий, так как я новичок в этом форуме :)
Я не использовал старый пакет pyXLreader , но сделал свой пост с учетом xlrd ;)
Я видел он месяц назад, но не использовался в проектах.
WBR
Я новичок в этих форумах, и было бы неплохо, если бы они указали год на отметках времени (любимая мозоль), чтобы я знал, сколько лет постам. Я собираюсь предположить, что они из 2009 года.
но хорошее решение в python - использовать xlrd для чтения ваших xls файлов. вот довольно простой вводный урок: http://scienceoss.com/read-excel-files-from-python/ это не мое.
единственная проблема, с которой я столкнулся, были даты в формате Excel. вот быстрое исправление для них:
date = xlrd.xldate_as_tuple (int (sheet.cell (rowNum, colNum) .value), workBookName.datemode)
, чем создать файл csv со встроенным модулем csv, поскольку Я новый пользователь, я могу разместить только одну гиперссылку. но погуглите api модуля csv.
надеюсь, что это было полезно
Вы можете использовать xls2csv из пакета catdoc, если вы используете Debian / Ubuntu