Страница 4 из 4

Выгрузка из Clarion в Excel

Добавлено: 05 Май 2015, 17:05
Губин Игорь
kreator писал(а): Вам бы только посмеяться. У людей горе...
Вам бы только посмеяться. У людей горе... :cat:

Выгрузка из Clarion в Excel

Добавлено: 05 Май 2015, 17:05
Ал
ну вот - взял и сдал все явки... :(

Выгрузка из Clarion в Excel

Добавлено: 05 Май 2015, 17:52
PavelNK
Ал писал(а)::D
Губин Игорь писал(а):Да плюнь ты на секретность, договорись с кем-нибудь и всё тебе будет.
Родина, которая ...на, всегда помнит своих героев, и визу лет XX - ни-ни?
iBorman писал(а): ... *.mem. Кто подскажет, как вытащить информацию из него?
для начала в хелпе по языку CLARION про MEMO поля посмотри..., ну и если всё сам - придется ручками и писать-писать, лучше сразу в какой-ниб из сред CW6-CW10, только про галочку OEM в словаре не забывать :lol:
Первая форма допуска устроит?

Выгрузка из Clarion в Excel

Добавлено: 05 Май 2015, 18:12
Губин Игорь
PavelNK писал(а): Первая форма допуска устроит?
Первой формы будь достоин!
Враг не дремлет!
Майор Пронин

Там коммерческая, как я понял, а это куда страшнее :idied:

Выгрузка из Clarion в Excel

Добавлено: 05 Май 2015, 18:18
ingasoftplus
а нельзя попробовать это?

http://www.scalabium.com/clarion/

http://www.processtext.com/abcclarion.html

там и триалы есть - да и стоит оно недорого ?

Выгрузка из Clarion в Excel

Добавлено: 06 Май 2015, 12:16
Ал
Там коммерческая, как я понял, а это куда страшнее :idied:
Изображение

Выгрузка из Clarion в Excel

Добавлено: 06 Май 2015, 23:17
iBorman
Товарищи!
Я начал этот форум, ничерта не понимая ни в Кларион, ни в программировании. Сейчас я его заканчиваю, понимая что не знаю в этом действительно сложном деле совсем ничего. Но, благодаря вашей помощи, я решил свою проблему! Спасибо всем огромное! Особенно я благодарен человеку под ником Kreator, чьи отзывчивость и дельные советы в итоге помогли мне справиться (отдельное спасибо за SQL сервер :D ).
Всех с наступающим праздником великой ПОБЕДЫ! СЧАСТЬЯ И УСПЕХОВ! УРА!

С благодарностью и уважением, iBorman.

Выгрузка из Clarion в Excel

Добавлено: 08 Май 2015, 12:33
kreator
Ну раз так удачно получилось с FireBird, считаю, есть смысл остаться на FB, не перегонять в Excel. А клиентскую часть переписать на современный лад.

Выгрузка из Clarion в Excel

Добавлено: 02 Ноябрь 2020, 10:41
tolobot
kreator писал(а): 05 Май 2015, 16:58 Вам бы только посмеяться. У людей горе...
Ещё вариант для не боящихся работы.
Качаешь бесплатный SQL сервак Firebird с сайта http://firebirdsql.org/ (думаю, любую версию). Находишь средство для работы с ним IBExpert (есть бесплатные, для пользователей СССР). Создаёшь в IBExpert'е новую БД без таблиц. И там есть импорт из DAT (проверил memo подхватывает, во всяком случае IBExpert 2011), и есть экспорт во что хочешь, в том числе сразу в Excel. Дерзай!
Огромное Вам спасибо! Специально регистрировался ради этого. Я очень долго искал как можно вытащить данные из клариона и Ваше сообщение очень сильно помогло.

Выгрузка из Clarion в Excel

Добавлено: 02 Ноябрь 2020, 19:08
kreator
Спасибо тебе, добрый человек! :ty:
Это ж надо ж!

Выгрузка из Clarion в Excel

Добавлено: 03 Ноябрь 2020, 17:41
Alex
выгрузку надо делать в транзитный формат. Например CSV. Дабы потом уж -куда надо. Либо Импорт файлов в словарь БД и написание уже выгрузки непосредственно в Excel

Выгрузка из Clarion в Excel

Добавлено: 04 Ноябрь 2020, 13:39
kreator
Alex писал(а): 03 Ноябрь 2020, 17:41 выгрузку надо делать в транзитный формат. Например CSV. Дабы потом уж -куда надо. Либо Импорт файлов в словарь БД и написание уже выгрузки непосредственно в Excel
В данном топике ситуация другая. Программиста нет, а данные перетащить надо. Какой csv? Если программист есть, то вариантов куча. И в этом случае csv не самый лучший вариант.

Выгрузка из Clarion в Excel

Добавлено: 06 Ноябрь 2020, 14:54
tolobot

Код: Выделить всё

DECLARE @ClarionDate INT = 47563
DECLARE @SqlDateTime DATETIME 

-- Convert the clarion DATE into and SQL DateTime
SET @SqlDateTime = DateAdd(day, @ClarionDate  - 4, '1801-01-01') 

SELECT @SqlDateTime AS 'SQL Date Time'

-- Now convert it back from and SQL DateTime to a Clarion Date
SET @ClarionDate = DateDiff(day, DateAdd(day, -4, '1801-01-01'), @SqlDateTime)
SELECT @ClarionDate AS 'Clarion Date'

/*
A Clarion standard date is the number of days that have elapsed since 
December 28, 1800. The range of accessible dates is from January 1, 1801 
(standard date 4) to December 31, 9999 (standard date 2,994,626). Date 
procedures will not return correct values outside the limits of this range. 
The standard date calendar also adjusts for each leap year within the range of 
accessible dates. Dividing a standard date by modulo 7 gives you the day of the 
week: zero = Sunday, one = Monday, etc.
The LONG data type with a date format (@D) display picture is normally used for 
a standard date. Data entry into any date format picture with a two-digit year 
defaults to the century of next 20 or previous 80 years. For example, entering 
01/01/01 results in 01/01/2001 if the current year (per the system clock) is 
greater than 1980, and 01/01/1901 if the current year is 1980 or earlier.
The DATE data type is a data format used in the Btrieve Record Manager and some 
other file systems. A DATE field is internally converted to LONG containing the 
Clarion standard date before any mathematical or date procedure operation is 
performed. Therefore, DATE should be used for external file compatibility, and 
LONG is normally used for other dates.
*/
Оставлю, для тех кто будет делать по совету от kreator. Суть в том, что при импорте из .DAT файлов клариона в БД Firebird, через Ibexpert в JSON, у меня не импортировались нормально столбцы содержащие ДАТУ, они остались в виде числовых значений. Данный код, может это исправить. Его суть: "числовое значение клариона" - "4" + "дата отсчета в кларионе" = "преобразованная дата". "Дата отсчета" в кларионе = 1801-01-01, к этой дате надо просто добавить "числовое значение из клариона" - "4", которое является количеством дней прошедших с этой даты. Также приложу код скрипта на питоне, благодаря которому я решил свою проблему с неправильными датами.

Код: Выделить всё

import json
import datetime

def parser_for_clarion_date(clarion_value):
    # если вместо значения попадается Null, то выводим его.
    if clarion_value == None:
        return 'null'
    else:
        # Значение = кол-во дней прошедших с даты отсчета - 4 дня
        value = clarion_value - 4
        # Дата с которой идет отсчет в кларионе 01-01-1801, к ней будем добавлять кол-во дней (значение)
        time = datetime.date(1801, 1, 1)
        # получаем дату. Количество дней + дата отсчета клариона
        new_value = time + datetime.timedelta(days=value)
        # переводим формат даты из Год.месяц.день в День.месяц.год
        return new_value.strftime("%d.%m.%Y")

# К имени файла добавляем маску "_исправленный". Буду использовать для сохранения в новый файл.
def rename_file(file, mask='_исправленный'):
    splitter = file.split('.')
    return splitter[0] + mask + '.' + splitter[1]

def clarion_json_parser(file):
    file = file.replace('"','')
    with open(file, 'r', encoding='utf-8') as json_file:
        data = json.load(json_file)
        data2 = {}
        data2['VLAD_CENTR'] = []
        for element in data["RecordSet"]:
            data2['VLAD_CENTR'].append({
                'N_REC_VL': element['N_REC_VL'],
                'F': element['F'],
                'I': element['I'],
                'O': element['O'],
                # для полей с датами применяем функцию преобразования значения клариона в ДАТУ
                'DATA_RV': parser_for_clarion_date(element['DATA_RV']),
                'DATA_CH': parser_for_clarion_date(element['DATA_CH'])
            })
    with open(rename_file(file), 'w', encoding='utf-8') as outfile:
    # при записи в файл слетала кодировка у кириллицы, помогло добвавление ensure_ascii=False
        json.dump(data2, outfile, indent=4, ensure_ascii=False)
		

# вместо file указываем путь к JSON файлу, рядом будет создан новый файл с исправленными датами
clarion_json_parser(file)