|
Чтение dbf
|
|||
---|---|---|---|
#18+
Необходимо прочитать dbf файл, Затем кэшировать в sqllite для дальнейшей работы. Пробую использовать JDBF и чего-то не понимаю. Написано в примере: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Переписал так: Код: java 1. 2. 3. 4. 5. 6. 7.
при объявлении DBFReader dbf = new DBFReader(filePath); сразу же генерируется Exception с сообщением: Код: java 1.
В следствии чего возникает два вопроса: 1 - Что я делаю не так? 2 - Есть ли другие варианты чтения dbf? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2015, 22:05 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
Pashekka, длина файла не более 8 символов и на латинице. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2015, 23:07 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
wamacoдлина файла не более 8 символов и на латинице. Спасибо проблему понял, видимо не подходит библиотека, ограничение, на 254 символа подправил в исходнике, а вот MEMO вообще не понимает. Буду искать что-то другое, не под советуете? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2015, 23:35 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
Нашел дополненую версию JDBF+ тут есть чтение MEMO полей. Буду пробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2015, 23:59 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
JDBF+ все получилось, только пример не оч. корректный, кому будет интересно поделюсь. Теперь борюсь с перекодировкой CP866 -> CP1251, если есть вариант помогите. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2015, 00:55 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
PashekkaТеперь борюсь с перекодировкой CP866 -> CP1251, если есть вариант помогите. Чем встроенные средства не устраивают? https://docs.oracle.com/javase/tutorial/i18n/text/string.html ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2015, 08:36 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
wadmanЧем встроенные средства не устраивают? https://docs.oracle.com/javase/tutorial/i18n/text/string.html Чего то я не понял с перекодировкой, предполагаю что нужно найти код символа и подставить его из таблицы cp1251? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2015, 23:35 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
Хотел обмануть судьбу такой функцией: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Но фокус не удался :( ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2015, 23:36 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
PashekkawadmanЧем встроенные средства не устраивают? https://docs.oracle.com/javase/tutorial/i18n/text/string.html Чего то я не понял с перекодировкой, предполагаю что нужно найти код символа и подставить его из таблицы cp1251? Доступные кодировки http://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html Как посмотреть, что есть в андроиде (1251 точно есть) http://www.java2s.com/Tutorial/Java/0180__File/DisplaysAvailableCharsetsandaliases.htm ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2015, 08:58 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
wadman, нет у меня cp866 Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77.
Не где не могу накопать, нашел вот такую приблуду на C++: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
Как я понял сдесь перекодирывают hex код символа для вывода hex нашел функцию charToHex из UnicodeFormatter и далее Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2015, 21:40 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
Пришлось сделать класс для перекодировки (в java новичок критика приветствуется): Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115.
И все получилось. Использование Код: java 1.
Осталось привести класс в потребный вид и все готово :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2015, 22:57 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
Извините забыл дописать: Функцию convertHexToString пришлось изменить Код: java 1. 2. 3. 4. 5. 6. 7. 8.
на т.к. на выходе символ в HEX = 0a00, а в примере HEX = 4c Код: java 1. 2. 3. 4. 5. 6. 7. 8.
За функцию convertHexToString отдельное спасибо wadman https://docs.oracle.com/javase/tutorial/i18n/text/string.html ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2015, 23:05 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
Зачем конвертация делается через hex? Что за магия такая? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2015, 09:22 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
wadmanЗачем конвертация делается через hex? Что за магия такая? Все от лени :) в HEX т.к. я нашел массивы соотв. только в HEX. А есть д.р. вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2015, 16:41 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
Чего-то моя твоя не понимай... Логика у тебя такая, что ты берешь символ, конвертируешь его код в строку-хекс и затем обратный порядок, но в другой кодировке? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2015, 16:56 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Странно, но конвертирует без проблем... Закодировано слово "Россия". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2015, 17:18 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
На 5.1 проверил. :) Может не на всех версиях взлетит, но на ней 5.1 выдает такой-же перечень кодировок как и тут 17471957 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2015, 17:27 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
wadmanНа 5.1 проверил. :) Может не на всех версиях взлетит, но на ней 5.1 выдает такой-же перечень кодировок как и тут 17471957 У меня 4.0.3 и при выполнении выдает "UnsupportedEncodingException: Cp866" по этому и начал замарачиваться, да и к лучшему наверно что выдал прога будет работать на разных моделях в том числе и старых ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2015, 20:41 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
PashekkawadmanНа 5.1 проверил. :) Может не на всех версиях взлетит, но на ней 5.1 выдает такой-же перечень кодировок как и тут 17471957 У меня 4.0.3 и при выполнении выдает "UnsupportedEncodingException: Cp866" по этому и начал замарачиваться, да и к лучшему наверно что выдал прога будет работать на разных моделях в том числе и старых Но способ через преобразование в строковые хекс - странный выбор. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2015, 21:05 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
wadmanНо способ через преобразование в строковые хекс - странный выбор. А как лучше? Через байт код? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2015, 10:13 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
PashekkawadmanНо способ через преобразование в строковые хекс - странный выбор. А как лучше? Через байт код? Конечно... Алгоритм такой: 1. Создаешь два массива, один для 866 -> 1251, другой для 1251 -> 866. На будущее. :) 2. Заполняешь их таким образом, чтобы код символа новой кодировки был по тому индексу, где расположен старый. То есть, если нужно конвертировать из дос в вин русскую А (дос:128 в вин:192), то в массиве в 128-ой позиции должен быть код 192. Русская Б (дос:129 в вин:193), то в массиве в 129 позиции должен быть код 193 и т.д. Получается так, что просто пробегаешься по символам в качестве индекса и складываешь все в новую строку. Придется немного поработать ручками, но это будет наиболее оптимальный алгоритм конвертирования. "Лучше за 5 минут долететь..." (с) Кодировки http://pascal.net.ru/866 http://pascal.net.ru/1251 Если не сообразишь о чем я написал, то в понедельник (или позднее) накидаю алгоритм в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2015, 10:54 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
wadman Придется немного поработать ручками, но это будет наиболее оптимальный алгоритм конвертирования. "Лучше за 5 минут долететь..." (с) Кодировки http://pascal.net.ru/866 http://pascal.net.ru/1251 Если не сообразишь о чем я написал, то в понедельник (или позднее) накидаю алгоритм в коде. Принцип понял спс за табл. кодировки время будет сделаю. В принципе именно этого я и хотел. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2015, 13:11 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
Нашел интересную процедуру на Pascal Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Попробую переделать ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2015, 13:29 |
|
Чтение dbf
|
|||
---|---|---|---|
#18+
Вот, что я имел в виду: два массива для перекодировки cp866 в cp1251 (win1251) и обратно. И к ним две простые функции. Думаю, что по скорости это самый быстрый вариант. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62.
Символы рубля, евро, №, Ё/ё учитываются. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2015, 10:24 |
|
|
start [/forum/topic.php?fid=13&msg=38923313&tid=1331366]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 249ms |
total: | 381ms |
0 / 0 |