Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Копирование колонок из dbf в txt (csv)

Ответить
Настройки темы
Любой язык - Копирование колонок из dbf в txt (csv)

Новый участник


Сообщения: 38
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: txt vvod.TXT
(328 байт, 6 просмотров)
Тип файла: zip sprav.zip
(856 байт, 5 просмотров)
Форумчане, здравствуйте!
Нужна помощь в решении задачи:
есть два файла вывода данных 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

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6494
Благодарности: 1466

Профиль | Отправить 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
Конвертеры dbf2csv:

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 06:01, 07-01-2024 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Technik_spat,
Ещё есть варианты на основе powershell, но с установкой доп.модуля или сторонней библиотеки:
1. https://github.com/Delapro/PSDBF
2. https://gist.github.com/mavericksevm...a4c5c3c7a8ee57
- уже есть ссылка в сообщении выше
или вариант на питоне (тоже потребуется установка доп. батарейки)
cmd:
Код: Выделить весь код
pip install dbfpy3
и сам код чтения на питоне:
Код: Выделить весь код
from dbfpy3 import dbf

db = dbf.Dbf("sprav.dbf")
f = lambda x: x.decode('cp1251')
print(list(map(f,db.field_names)))
for item in db:
    print(list(item))
- если интересно, то можно написать код для конвертации...

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:13, 07-01-2024 | #3


Новый участник


Сообщения: 38
Благодарности: 0

Профиль | Отправить PM | Цитировать


Премного БЛАГОДАРЕН))))))
Буду дальше скрипт pwsh развивать)))))
К сожалению, с пайтоном вообще не знаком((((((

Отправлено: 08:43, 07-01-2024 | #4


Новый участник


Сообщения: 38
Благодарности: 0

Профиль | Отправить PM | Цитировать


К сожалению файл через питон не сохраняется

Отправлено: 16:42, 10-01-2024 | #5


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить 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)
все файлы необходимо положить рядом с файлом скрипта python...

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 10-01-2024 в 20:08.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:56, 10-01-2024 | #6


Новый участник


Сообщения: 38
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Technik_spat,
подробности бы...
А так, в соответствии с первым постом:
python »
Скрипт отрабатывает, но файл не создается.
Вообще первоначальная задача:
из файла sprav.dbf ивзлечь 2 и 18 колонки, а ещё бы сразу в ANSI преобразовать.

Отправлено: 21:05, 10-01-2024 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Technik_spat:
но файл не создается. »
Покажите результат работы скрипта, то, что отображается в консоли.
Цитата Technik_spat:
Вообще первоначальная задача »
Вы можете отредактировать стартовый пост в этом топике и изложить задачу так, как необходимо.
Пример того, что должно получится в итоге и того файла, откуда необходимо получать данные, тоже надо бы добавить.

Цитата Technik_spat:
ещё бы сразу в ANSI преобразовать. »
ANSI — стандарты ANSI (American National Standards Institute, Национальный институт стандартизации США).
А вот какая кодировка требуется, это надо уточнить.
Доступные кодировки
Предполагаю, что требуется 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)

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 11-01-2024 в 08:11. Причина: Добавлена ссылка на список кодировок

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:46, 11-01-2024 | #8


Новый участник


Сообщения: 38
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
»
Вы знаете, задача отпала в том виде в котором она вообще есть)))))
СПАСИБО ВСЕМ ЗА ПОМОЩЬ))))

Отправлено: 08:18, 12-01-2024 | #9


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


"Не спеши выполнять работу, её могут отменить"

-------
scio me nihil scire. Ѫ


Отправлено: 12:40, 12-01-2024 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Копирование колонок из dbf в txt (csv)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход