Files
kompas3d-mcp/docs/Kompas3D_SDK/guides/opentextfile.md
T
mikhail e1337e4016 feat(sdk-docs): MD-база знаний SDK — в репозиторий; генератор и зеркало убраны
docs/Kompas3D_SDK/ становится каноническим источником справки КОМПАС SDK
и включается в репозиторий (2491 файл, ~14 МБ). HTML-зеркало
docs/KOMPAS_SDK_ru-RU/ (~1.4 ГБ, © АСКОН) и генератор
tools/build_kompas3d_sdk.py больше не нужны — регенерация не предполагается.

- .gitignore: MD-база разблокирована; зеркало остаётся проигнорированным
  (safety-net на случай повторной локальной выгрузки).
- CLAUDE.md / SKILL.md: убраны упоминания регенерации и зеркала.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 20:00:05 +03:00

108 lines
4.1 KiB
Markdown

---
title: "OpenTextFile - Открыть текстовый файл запросов"
type: guide
api: [api7]
tags: [guide, api7, opentextfile]
sources:
- opentextfile.html
---
*API экспортных функций > Функции работы с прикладной библиотекой  > Функции работы с базами данных *
## OpenTextFile - Открыть текстовый файл запросов
Пример...
Аналог данной функции при использовании Automation - метод ksDataBaseObject::ksOpenTextFile.
Синтаксис:
```
reference OpenTextFile(char * fileName);
Входной параметр:
fileName - имя файла.
Возвращаемое значение:
указатель на открытый файл - в случае успешного завершения,
0 - в случае неудачи.
```
Примечание:
1. Функция работает по правилам стандартной процедуры WINDOWS OpenFile.
2. Реализованные в рамках данного раздела функции работы с текстовыми файлами обеспечивают их построчную обработку и позволяют вынести обращения к базе данных во внешний текстовый файл. Это дает возможность работать с разными платформами СУБД без изменения выполняемого кода приложения.
3. При использовании Unicode следует использовать функцию OpenTextFileW.
## OpenTextFile, CloseTextFile, ReadStrFromTextFile- пример использования
////////////////////////////////////////////////////////////////////////
//пример текстового файла 1.loa
10.0 100 1
15.0 80 2
20.0 120 1
////////////////////////////////////////////////////////////////////////
//пример текстового файла запросов 11.txt привязанный к файлу 1.loa
1:TXT_DB
2:1.loa
3:1 2 3
4:a=%.1f
//////////////////////////////////////////////////////////////////////////
//пример текстового файла запросов 12.txt привязанный к БД ACCECC c именем
// test в ODBC.INI. ODBCSDK должен быть установлен на ПК
1:ODBC_DB
2:test
3:select a,b,t from table1
4:where a=%.1f
//////////////////////////////////////////////////////////////////////////
#ifndef __LIBTOOL_H
#include <libtool.h>
#endif
#ifndef __LIBDB_H
#include <libdb.h>
#endif
void DrawRect (void) {
char buf[40], s[128];
struct {
double a;
double b;
int t;
} r;
reference f = OpenTextFile("11.txt");
if (EditMacroMode()) //режим редактирования
GetMacroParam(&r, sizeof(r));
else { //cоздание нового макроэлемента
r.a = 20;
r.b = 10;
}
// считали тип БД - "TXT_DB"
if (!ReadStrFromTextFile(f,buf,1)) {Error("Ошибка"); return; }
reference bd = CreateDB (buf);
// считали имя БД - "1.loa"
if (!ReadStrFromTextFile(f,buf,2)) {Error("Ошибка"); return; }
ConnectDB(bd, buf);
//задаем отношение
reference r1 = Relation(bd);
RDouble ("a");
RDouble ("b");
RInt ("");
EndRelation();
//считывать все колонки "1 2 3"
if (!ReadStrFromTextFile(f,buf,3)) {Error("Ошибка"); return; }
DoStatement(bd, r1, buf);
ReadDouble("задайте ширину",r.a,0,100, &r.a);
//считать условие "a=%.1f"
if (!ReadStrFromTextFile(f,buf,4)) {Error("Ошибка"); return; }
sprintf (s, buf,r.a); // условие например a=10.0
Condition(bd, r1, s);
if (ReadRecord(bd, r1, &r)) {
reference m = Macro();
LineSeg(0, 0, r.a, 0, r.t);
LineSeg(r.a, 0, r.a, r.b, r.t);
LineSeg(r.a, r.b, 0, r.b, r.t);
LineSeg(0, r.b, 0, 0, r.t);
EndObj();
//записать параметры в макроэлемент
SetMacroParam( m, &r, sizeof(r), NULL, NULL, -1);
}
else
Error("прямоугольник с такими параметрами не найден в БД");
DeleteDB(bd);
CloseTextFile(f);
}; /* OpenTextFile */