在公式管理器里点下导入,软件窗口直接没了,没有提示框,重开之后公式列表里也看不到新导入的内容。遇到通达信导入公式闪退,能拿来定位的线索比报错少得多,因为进程结束之后提示文字根本来不及留下。这种情况下该从哪一处开始查?

下面把这个问题拆成入口、文件、源码三层,每层给出可以自己核对的位置与顺序,最后附一份按步骤走的清单。全文只讨论软件操作与文件结构,不评价任何公式的效果,也不给出操作结论。文中提到的目录名与菜单路径以通达信金融终端个人版为参照,版本号可以在「帮助 → 关于」里核对。

一、闪退与报错不是同一类问题

报错的特征是进程还在,并且给出一段提示文字。提示原文里会写明编译器停下的位置或检查项名称,顺着原文找就能落到具体的一行。这类问题的处理入口是提示文字。

闪退的特征是进程结束,没有提示文字。它留下的线索只有三处:操作系统日志里该进程的退出记录、软件目录下的临时文件、以及被写到一半的公式库文件。处理通达信导入公式闪退,入口是「刚才点了什么」与「刚才在写哪个文件」,与提示原文无关。

闪退之后先不要急着重开软件再点一次导入。第二次写入会在第一次留下的半成品文件上继续,把现场线索覆盖掉,也让后面的还原变得更麻烦。

二、动手之前先把 T0002 复制一份

自定义公式与相关索引文件都放在软件安装目录下的 T0002 里,自定义公式数据文件是 PriGS.dat,备份目录是 gs_bak。在排查开始之前,把整个 T0002 目录复制到别的位置存好。

{ 排查前的准备动作 }
1. 关闭行情软件进程
2. 找到软件安装目录下的 T0002 目录
3. 整个 T0002 复制到别的位置(不要只复制 PriGS.dat)
4. 记下复制的时间点

{ 需要还原时 }
把复制出来的 T0002 整个放回原位置覆盖
或从 gs_bak 中取对应时点的副本

只复制 PriGS.dat 是不够的。导入过程可能同时改写公式索引与其它配置项,只还原这一个文件,会出现数据文件与索引对不上的情况。

三、从导入入口分开看

通达信的公式导入有几种入口,触发通达信导入公式闪退的原因不在同一处。先把「刚才用的是哪个入口」确定下来,排查范围就能收窄。

导入入口 操作位置 先核对什么
管理器内导入 功能 → 公式系统 → 公式管理器(快捷键 Ctrl+F),在左侧对应分支上点「导入」 选中分支的类型与公式类型是否对应
双击公式文件 在资源管理器中双击扩展名已关联到本软件的公式文件 该扩展名当前的关联程序是不是这个版本
编辑器内粘贴 公式管理器里新建公式后,把源码粘贴进编辑区 源码的字符集与单行长度
批量导入 一次选中多个公式文件,或导入整套公式包 文件数量、封装方式与压缩包结构

四、文件层面的三类中断

第一类是扩展名与封装类型不被当前版本接受。通达信公式导出文件用到过扩展名 tnf、tni 等,加密导出与未加密导出的封装结构不同。把加密导出件放到只接受未加密件的入口,或者把较早版本的封装放进较新的版本,都可能在解析阶段中断。核对办法是把文件的扩展名与来源,和你所用版本帮助里写明的可识别格式逐字比对。

第二类是字符集。源码文本以 GBK 保存时,如果文件实际是 UTF-8 编码,逐字节读取会把非 ASCII 部分读成乱码,其中个别字节序列会让解析过程走到预期之外的分支。核对办法是用十六进制查看器看文件开头有没有 UTF-8 的 BOM 标记 EF BB BF。有 BOM 而软件按 GBK 读取,就是一个明确的怀疑点。

第三类是写入受阻。文件正在被其它进程读取,或者 T0002 目录没有写权限,会让写入中途停下。这一类的特征是退出发生在导入动作的末尾而不是开头。核对办法是看安全软件与同步盘的运行状态,以及目录的权限设置。

把待导入文件复制到桌面再导入,可以排除「文件在只读位置」与「文件被占用」这两层。这一步不改变任何设置,成本也低。

五、源码层面的中断触发点

如果闪退出现在编辑器内粘贴或保存的那一步,位置就要转到源码本身。可以核对的触发点有这几处。

  • 单行过长。解析时的行缓冲区长度有限,超长行会让解析走出预期路径。核对办法是把最长的那一行单独取出来,数一下字符数。
  • 参数表与正文不匹配。参数表里声明的参数个数,与正文里实际使用的个数对不上。
  • 公式类型与内容不匹配。把需要输出价格量级的写法放进条件选股的公式体里,类型检查会在这一层停住。
  • 使用了当前版本未收录的函数。函数名不在你所安装版本的函数列表里,解析到该标识符时无法继续。
  • 自引用或循环引用。公式体里引用了自身,或两个公式互相引用。

这几类里,前两类可以直接用字符数与参数个数核对,后三类要靠函数列表与公式间的引用关系核对。核对顺序建议从能用数字说清的开始。

六、按顺序走一遍排查清单

步骤 动作 结果指向
1 关闭软件,整个备份 T0002 把现场固定下来
2 新建一个只含一行的最小公式,例如 A:MA(CLOSE,20);,走同一个导入入口 分离「通道问题」与「内容问题」
3 若最小公式也闪退,转到文件层核对扩展名、编码与写入权限 问题在导入通道或文件
4 若最小公式正常,把原源码分批加回,每次只加一段 定位到具体的行
5 换一个导入入口再试一次(管理器内导入 ↔ 双击文件 ↔ 编辑器粘贴) 区分入口相关与内容相关
6 打开 Windows 事件查看器 → Windows 日志 → 应用程序,找行情软件进程的退出记录 拿到退出时的错误码
7 需要时从备份或 gs_bak 还原公式库 恢复到可用状态

第 2 步是整个清单里作用最大的一步。一个只含一行的公式能通过导入,说明导入通道本身是通的,接下来的工作只是在源码里找那个触发点;它同样闪退,说明不必再去读源码,直接转向文件与环境。

七、清单走完之后还剩的情况

七步走完仍没有结论时,说明这次通达信导入公式闪退不属于上面任何一层,剩下两类情况需要单独判断。

一类是版本不匹配。券商定制版与官方版的函数表、导入入口、可识别格式都可能不同,同一份公式文件在两边表现不一致。判断办法是核对两个版本的版本号,以及各自帮助菜单里写明的可识别文件格式。

另一类是环境干扰。安装目录被安全软件或同步工具持续扫描,写入被拦截后又立刻释放,可能会让进程在读写交替的瞬间退出。判断办法是看安全软件的拦截记录,以及目录是否位于同步盘路径下。

走到这一步,把三样东西备齐再继续会省下几轮来回:软件版本号(帮助 → 关于 里的截图)、退出前一步的操作路径、Windows 事件查看器里的那条退出记录。三样凑齐,问题基本能落到一个可以复现的位置上。

文中目录名、文件名与菜单路径以通达信金融终端个人版为参照;不同版本与券商定制版可能存在差异,请以你所用版本的「帮助 → 关于」与本地实际目录为准。站内 公式报错与卡顿排查 一栏讲编译提示与显示异常的对照,公式安装与导入 一栏讲导出文件的格式与导入步骤,公式编写与语法函数 一栏讲源码里函数与参数的写法,可对照查看。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。