2015-10-23 2 views
0

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

Прямо сейчас я хочу его правильно спроектировать, поэтому я не буду сталкиваться с проблемами позже при реализации CSV/Excel, читающей часть письма.

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

Последний раз, когда я занимался редактированием CSV-файлов, мне пришлось переписать каждую строку в новый или существующий файл, а не просто редактировать определенную строку. Это единственный способ сделать это?

Ex - если мой CSV-то вроде

1,2,3 and i wanted to change 1,2,3 
4,5,6 4,5,6 to a,b,c   a,b,c 
7,8,9       7,8,9 

Единственный способ будет читать каждую строку, изменить его, если это необходимо, а затем записать его снова? Нельзя просто отредактировать среднюю линию?

Причина, по которой я прошу об этом, заключается в том, что я планирую делать множество пользовательских изменений пользователя через графический интерфейс и записывать изменения в файл каждый раз, вероятно, будет очень плохо?

Я думаю, что сохранение каждой строки или ячейки в массиве и редактирование массива было бы более эффективным решением.

Какие-нибудь уловки или советы, которые вы могли бы предложить при редактировании CSV-файлов?

Боковое примечание: я, вероятно, буду делать это на Java, так как я больше всего знаком с созданием GUI с Swing, но я открыт, чтобы попробовать его на другом языке.

ответ

1

Прежде всего, нарушите эту проблему в своих компонентах, так как вы ее сильно напугаете.

Корень проблемы заключается в том, что у вас есть файл с записями, которые вы пишете gui, чтобы разрешить пользователю редактировать.

В целях повышения производительности вы хотите читать и писать в тот же файл, пытаясь только читать или писать одну запись.

Этот файл находится в формате csv.

Итак, у первого из вас холодно, поэтому нет необходимости проходить через это.

Вторая часть, которую я бы сказал, не со многими восклицательными знаками. Причина этого - худший сценарий - вы запускаете программы. В этот момент вы испортили свой оригинал. Если вы знаете, что количество записей невелико, тогда прочитайте все это в памяти (например, список строк) и проанализируйте отдельные строки в своих записях, и когда пользователь будет выполнен, и они отправятся на сохранение, вы напишите его в другой файл что когда-то вы удалили оригинал и переименовали второй файл в первый. Таким образом, если вы нажмете наихудший сценарий, у вас либо нет оригинального файла, либо изменения находятся под другим именем.

Если имеется слишком много времени для размещения в памяти, есть RandomAccessFile, который позволяет читать и записывать в тот же файл. Но Я бы порекомендовал вам сделать копию файла в начале (используя .tmp или .swp, который используют некоторые редакторы) и работать с ним, поскольку он по-прежнему защищает вас от ужасного сбоя.

После этого вы имеете дело с данными CSV. Если это простой текст, вы можете использовать метод разделения строк Java. Если он более сложный, то openCSV имеет метод CSVParser, который будет анализировать строку в массив строк для вас. Существует также CSVParserBuilder, который упрощает создание синтаксического анализатора.

Надеюсь, что это поможет.

:)

+0

Спасибо. Что касается размера, я бы не думал, что это будет более 1000 строк, поэтому я предполагаю, что, как мастер растет, чтобы иметь несколько столбцов для каждого исходного столбца, он может вырасти до 10 000-15 000 строк. Длина строки должна составлять около 20-40 символов. Это займет много памяти? –

+0

Просто выполнив математику, вы получите 600 тыс. Символов (15 000 * 40) и при условии, что символ в Java - это два байта, которые вы смотрите на 1,2 М памяти только для данных csv. Это много? Это зависит. Если вы собираетесь запускать это на более старом оборудовании или в какой-то сильно загруженной системе, то это может быть, но большинство систем сегодня пара мега-памяти - это грохот. Вы знаете больше, чем я знаю о ваших системных ограничениях. –

+0

Мне нравится тот факт, что вы готовы уступить 15-кратный рост. Если вы поместите все в память, вы должны рассмотреть возможность проверки длины файла в начале и, если он больше, чем ваш 1.2M, даст пользователю ошибку. Таким образом, если вы столкнулись с проблемой исправления этой проблемы, вы можете решить, можно ли увеличить размер, или вам нужно создать другое решение. Вы также можете сделать лимит файлов настраиваемым в файле свойств, чтобы его можно было быстро изменить, если у аппаратного обеспечения много памяти. –

Смежные вопросы