|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Копирование колонок из dbf в txt (csv) |
|
|
Любой язык - Копирование колонок из dbf в txt (csv)
|
Новый участник Сообщения: 38 |
Профиль | Отправить PM | Цитировать
Форумчане, здравствуйте!
Нужна помощь в решении задачи: есть два файла вывода данных dbf и txt c структурой csv Получается данные из первой и второй колонки файла dbf надо перенести в 21 столбец файла vvod через любой разделитель. Причём прелесть задачи в том, что строки в dbf абсолютно соответствуют таковым в txt (кроме пропуска заголовка из 7 строк). Помогите, пожалуйста, с решением задачи. Т.е. есть такие строки: 138596;;;;;;;;;;;;;;;;;;;;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;0;;;0;1;;;;;;;;;;0; 138597;;;;;;;;;;;;;;;;;;;;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;0;;;0;1;;;;;;;;;;0; А должно в конце выйти 138596;;;;;;;;;;;;;;;;;;;;Первая строк - 01/01/24;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;0;;;0;1;;;;;;;;;;0; 138597;;;;;;;;;;;;;;;;;;;;Вторая строк - 01/01/24;;;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;0;;;0;1;;;;;;;;;;0; dbf пришлось закатать в архив, а то форум ругается. |
|
Отправлено: 10:22, 06-01-2024 |
fascinating rhythm Сообщения: 6494
|
Профиль | Отправить PM | Цитировать Powershell
$dbfSrc = 'C:\temp\dbf\sprav.dbf' $dbfCsv = 'C:\temp\dbf\sprav.csv' $txtSrc = 'C:\temp\dbf\vvod.TXT' $txtDst = 'C:\temp\dbf\vyvod.TXT' & 'C:\Users\User\AppData\Local\Programs\DBF Converter\dbfcnv.exe' $dbfSrc $dbfCsv $dbf = Import-Csv $dbfCsv -Encoding default -Header 1,2 |% {"$($_.1) - $($_.2)"} $meta = gc $txtSrc -encoding utf8 |select -first 7 $csv = gc $txtSrc -encoding utf8 |select -skip 7 |ConvertFrom-Csv -Delimiter ';' -Header (1..66) $c = 0 $csv |% { $_.21 = $dbf[$c] $c++ } $meta |Out-File $txtDst -Encoding utf8 $csv |Convertto-Csv -delimiter ';' -NoTypeInformation |select -skip 1 |Out-File $txtDst -Encoding utf8 -Append
|
------- Отправлено: 06:01, 07-01-2024 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Technik_spat,
Ещё есть варианты на основе powershell, но с установкой доп.модуля или сторонней библиотеки: 1. https://github.com/Delapro/PSDBF или вариант на питоне (тоже потребуется установка доп. батарейки) cmd: и сам код чтения на питоне: - если интересно, то можно написать код для конвертации... |
------- Отправлено: 08:13, 07-01-2024 | #3 |
Новый участник Сообщения: 38
|
Профиль | Отправить PM | Цитировать Премного БЛАГОДАРЕН))))))
Буду дальше скрипт pwsh развивать))))) К сожалению, с пайтоном вообще не знаком(((((( |
Отправлено: 08:43, 07-01-2024 | #4 |
Новый участник Сообщения: 38
|
Профиль | Отправить PM | Цитировать К сожалению файл через питон не сохраняется
|
|
Отправлено: 16:42, 10-01-2024 | #5 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Technik_spat,
подробности бы... А так, в соответствии с первым постом: python import os from dbfpy3 import dbf fin = 'vvod.txt' fdbf = 'sprav.dbf' fout = 'out.txt' file_path = os.path.abspath(__file__) os.chdir(os.path.dirname(file_path)) db = dbf.Dbf(fdbf) out,i = [],0 z = [(item[0] + ' - ' + item[1]) for item in db] with open(fin,"r", encoding='utf-8') as f: for line in f: if ';' in line: tmp = line.split(';') tmp[20] = z[i] out.append(';'.join(tmp)) i += 1 else: out.append(line) with open(fout,'w',encoding='utf-8') as fw: for lin in out: fw.write(lin) |
------- Последний раз редактировалось YuS_2, 10-01-2024 в 20:08. Отправлено: 19:56, 10-01-2024 | #6 |
Новый участник Сообщения: 38
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Вообще первоначальная задача: из файла sprav.dbf ивзлечь 2 и 18 колонки, а ещё бы сразу в ANSI преобразовать. |
|
Отправлено: 21:05, 10-01-2024 | #7 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Technik_spat:
Цитата Technik_spat:
Пример того, что должно получится в итоге и того файла, откуда необходимо получать данные, тоже надо бы добавить. Цитата Technik_spat:
А вот какая кодировка требуется, это надо уточнить. Доступные кодировки Предполагаю, что требуется Windows-1251, тогда: import os from dbfpy3 import dbf # Файлы должны находиться рядом со скриптом, # либо можно указать абсолютный путь к ним: fin = 'vvod.txt' fdbf = 'sprav.dbf' fout = 'out.txt' file_path = os.path.abspath(__file__) os.chdir(os.path.dirname(file_path)) db = dbf.Dbf(fdbf) out,i = [],0 z = [(item[0] + ' - ' + item[1]) for item in db] with open(fin,"r", encoding='utf-8') as fr: for line in fr: if ';' in line: tmp = line.split(';') tmp[20] = z[i] out.append(';'.join(tmp)) i += 1 else: out.append(line) with open(fout,'w',encoding='cp1251') as fw: fw.writelines(out) |
|||
------- Последний раз редактировалось YuS_2, 11-01-2024 в 08:11. Причина: Добавлена ссылка на список кодировок Отправлено: 07:46, 11-01-2024 | #8 |
Новый участник Сообщения: 38
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
СПАСИБО ВСЕМ ЗА ПОМОЩЬ)))) |
|
Отправлено: 08:18, 12-01-2024 | #9 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать "Не спеши выполнять работу, её могут отменить"
|
------- Отправлено: 12:40, 12-01-2024 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Поиск и копирование папок из списка txt | promt@vk | Скриптовые языки администрирования Windows | 21 | 27-08-2021 11:52 | |
CMD/BAT - Выборочное копирование по значению в txt (csv) файлах | Technik_spat | Скриптовые языки администрирования Windows | 4 | 05-06-2021 11:27 | |
CMD/BAT - [решено] Конвертировать DBF в TXT | AlexVong | Скриптовые языки администрирования Windows | 4 | 11-07-2012 02:02 | |
Прочие БД - вытащить информацию из DBF файла и записать в TXT файлик | garanov | Программирование и базы данных | 5 | 23-05-2012 12:45 | |
Офис и Текст - Программы для конвертирования TXT в DBF | wwwSerg | Программное обеспечение Windows | 6 | 07-12-2005 14:17 |
|