RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-242027

Viktor Tomilov's questions

Martin Hope
Viktor Tomilov
Asked: 2024-12-16 23:40:24 +0000 UTC

再次在 Delphi 中使用整数和内存进行耙子。 TStringList.LoadFromFile

  • 7

似乎这里的一切都已经被考虑和尝试过了。但我又遇到了一把旧耙子。 Delphi 11/12,处理大型文本文件。

简单代码:

var slist:TStringList;
       slist:=TStringList.Create;
       slist.LoadFromFile(ParamStr(1));

导致错误 Exception EIntOverflow in module PrimitiveMotif.exe at 0000000000010DEA,版本 11 中的整数溢出,以及错误 Exception EAbstractError in module PrimitiveMotif.exe at 0000000000044191,抽象错误在版本 12 中。

该文件是文本。是的,巨大(就像我们所有人一样)。但“仅”1.5 GB,FAR 仅显示 1800 万行,这非常符合 TStringList 的限制。计算机上的内存 - 已满 (192 GB)。去哪里挖?

PS 字符串 - ANSI

windows
  • 1 个回答
  • 53 Views
Martin Hope
Viktor Tomilov
Asked: 2020-12-05 13:28:27 +0000 UTC

编译器错误 E2037 '%s' 的声明与之前的声明不同

  • 2

当节中的方法、函数或过程的声明与节中的声明不同时,编译器会抛出错误E2037 “%s”的声明与先前的声明不同。因此,对于那些在论坛上问这个问题的人,通常的建议是复制声明并粘贴,或者对类方法使用自动声明(默认为 Ctrl+Shift+C)。我一直认为这样的错误是一个简单的疏忽。implementationinterface

但是,我自己在自动声明后遇到了这个错误。编码:

type
  TAgarozeGel = class
  <...>
  public
  <...>
    procedure HorizontalReflection(Bitmap: TBitmap);
  end;

implementation

procedure TAgarozeGel.HorizontalReflection(Bitmap: TBitmap);
begin
 <...>
end;

编译时出现此错误,即使 IDE 本身在实现部分中创建了该方法的描述。为什么?

windows
  • 1 个回答
  • 10 Views
Martin Hope
Viktor Tomilov
Asked: 2020-11-30 18:36:07 +0000 UTC

使用整数和双精度变量记录

  • 2

为了计算模块的兼容以及不同代设备之间的数据交换(旧的使用整数位置类型,新的更精确的使用浮点类型),我们不得不引入以下类型:

type
  TDataRec = record
    <...>
    case integer of
      0: pos: integer;
      1: position:double;
  end;
  TDataAr = array of TDataRec;

总的来说,一切正常,我们没有注意到任何不便,除了存储空间的增加和小的时间延迟。以下是令人困惑的:double - 64 位,integer - 32。什么陷阱可能是因为这个?是否值得引入一个额外的 32 位字段作为存根?

delphi
  • 1 个回答
  • 10 Views
Martin Hope
Viktor Tomilov
Asked: 2020-12-20 13:06:09 +0000 UTC

从分组中获取子对象

  • 2

他们在 Corel Draw 中为我们创建了布局。为了避免编辑每个文本字段(所有内容都已在数据库中),决定通过 OLE 自动化该过程。有必要分析并在必要时替换几个文本表单(Shape)的内容 - 例如,在屏幕截图中,它们是“Product_type_top”和“Description_top”:

在此处输入图像描述

初始化:

const
  filename = 'P:\CorelPassports\for_open_d.cdr';
var
  cdr:Variant;
  sh,sh1:Variant;
  shapes:array of Variant;
  s:string;
<...>

  try
    cdr:=createoleobject('CorelDRAW.Application');
  except
    // Обработка
  end;
  cdr.Visible:=true;
  try
     cdr.OpenDocument(filename);
  except
    // Обработка
  end;

使用不属于组的表单,一切都很简单:

  cdr.ActiveDocument.ClearSelection;
  sh:=cdr.ActivePage.FindShape('Тип_продукта_верх'); 
  // sh.Type = cdrTextShape =   6, т.е. текстовый тип
  // и мы можем дальше работать с текстом:
  s:=sh.Text.Story; 
<..>

但是如果表格是一个组,一切都变得更加复杂和难以理解:

  sh:=cdr.ActivePage.FindShape('Описание_верх');
  // sh.Type = cdrGroupShape =  7, т.е. группа
  // и нужно получать доступ к членам группы
  // пробуем, как в VBA осуществить это через массив:

shapes:=sh.Shapes; 

错误“无效参数”

有什么问题?如何获取组的所有子文本元素?

delphi
  • 1 个回答
  • 10 Views
Martin Hope
Viktor Tomilov
Asked: 2020-02-26 16:05:04 +0000 UTC

什么是 Windows 10 激活点?有多少个,为什么需要它们?

  • 21

电脑运行Windows 10,我要换硬盘(显卡、网卡、处理器、内存等),会不会激活失败?我读到了更改硬件时花费的一些要点,这是如何发生的,可以控制吗?

windows
  • 1 个回答
  • 10 Views
Martin Hope
Viktor Tomilov
Asked: 2020-02-01 22:33:43 +0000 UTC

如何优化 MySQL 中的表/查询?

  • 35

人类基因组的基因表很小,只有 60434 个条目:

CREATE TABLE `genes-g38-201505` (
  `chr` varchar(2) NOT NULL,
  `left` bigint(20) NOT NULL,
  `right` int(11) NOT NULL,
  `Complement` int(11) NOT NULL,
  `Name` tinytext NOT NULL,
  `source` tinytext NOT NULL,
  `ENSEMBL` tinytext NOT NULL,
  `gene_version` tinytext NOT NULL,
  `gene_name` tinytext NOT NULL,
  `gene_source` tinytext NOT NULL,
  `gene_biotypeid` tinytext NOT NULL,
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=MyISAM;

人类基因组的重复表,已经更糟了——超过 550 万个条目:

CREATE TABLE `repeats-g38-201505` (
  `id` int(11) NOT NULL,
  `chr` varchar(2) DEFAULT NULL,
  `left` int(11) DEFAULT NULL,
  `right` int(11) DEFAULT NULL,
  `name` tinytext,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM;

这是两个服务表。其中,总的来说,只有 chr 对我们很重要 - 染色体的名称,左右 - 整个基因/重复或其部分的左右坐标(可能有几个部分,在这种情况下是几组{chr, left, right 对应一个名称}) 和名称是基因/重复的名称。

表的所​​有数据。

现在是癌症患者组织的实验数据。表格格式为:

CREATE TABLE `51k-80-80-ignore-random-noreverse` (
  `chr` varchar(2) NOT NULL,
  `left` bigint(20) NOT NULL,
  `right` bigint(20) NOT NULL,
  `count` int(11) NOT NULL,
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  UNIQUE KEY `chr_left_right` (`chr`,`left`,`right`),
  `id` bigint(20) NOT NULL AUTO_INCREMENT
) ENGINE=MyISAM;

每个实验都是一样的。每个条目描述了属于 chr 染色体的 DNA 模式,带有左右坐标,计数。记录的数量是不同的,每个实验从 4 到 7 个半百万。每个条目都是一组唯一的坐标 {chr, left, right}

最后一张表,您需要从 4 个实验中收集数据:

CREATE TABLE `pk47-pk51-gene-repeat` (
  `chr` varchar(2) NOT NULL,
  `left` bigint(20) NOT NULL,
  `right` bigint(20) NOT NULL,
  `count_k51` int(11) DEFAULT '0',
  `count_p51` int(11) DEFAULT '0',
  `count_p47` int(11) DEFAULT '0',
  `count_k47` int(11) DEFAULT '0',
  `name_left` varchar(29) NOT NULL,
  `name_right` varchar(17) NOT NULL,
  UNIQUE KEY `pos_name` (`chr`,`left`,`right`,`name_left`,`name_right`)
) ENGINE=MyISAM;

事实上,一切都很简单:您只需要找到落在基因左侧和右侧的那些模式 - 在重复上,计算它们的数量并将它们显示在数据透视表中。查询似乎没有问题,我重复这样的查询 4 ​​次,只将 count_k51 更改为 count_p51 和源表本身:

INSERT INTO `pk47-pk51-gene-repeat` (
      `chr`,`left`, `right`,`count_k51`,`name_left`, `name_right`
)
SELECT 
     a.`chr`, a.`left`, a.`right`, a.`count` as `count_k51`,
     g.`name` as `name_left`, 
     r.`name` as `name_right` 
FROM `
     51k-80-80-ignore-random-noreverse` a, 
     `genes-g38-201505` g,
     `repeats-g38-201505` r 
WHERE
     a.`chr`=g.`chr` and a.`chr`=r.`chr` and 
     a.`left` < g.`right` and a.`left` > g.`left` and 
     a.`right` < r.`right` and a.`right` > r.`left` 
     on duplicate key 
     update 
       `pk47-pk51-gene-repeat`.`count_k51`=a.`count`;

在第一次运行时,可以省略重复键。可能可以进行单个查询而不是 4x,但这会非常麻烦,现在我决定尝试一下。

当然,请求没有执行,由于超时而下降,我已经增加了很多。limit 0,1000; limit 1001,2000依此类推,据我了解,使用它是没用的,因为服务器的每个下一个阶段仍然会经历前一个阶段。
我决定通过 迭代请求id,对请求添加限制20000*i< a.id <20000*(i+1),但情况并没有改善,显然需要重新定义 id,或者应该强制服务器先执行此检查。

因此,我们需要有关如何优化查询、重建表或更改解决此问题的方法的想法(不一定是纯 SQL 查询,我可以使用编程语言中的数据库)。还要感谢您对服务器物理加速的建议:机器上有32GB内存,服务器使用很少,也许调整一些变量?

更新 1.以下是查询的 EXPLAIN 结果:

初始状态:

# id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
'1', 'SIMPLE', 'g', 'ALL', NULL, NULL, NULL, NULL, '60433', NULL
'1', 'SIMPLE', 'a', 'ref', 'chr_left_right', 'chr_left_right', '4', 'dna_homo_pairs.g.chr', '47216', 'Using index condition'
'1', 'SIMPLE', 'r', 'ALL', NULL, NULL, NULL, NULL, '5317291', 'Using where; Using join buffer (Block Nested Loop)'

按照@Mike 的建议添加了索引(chr、left、right):

# id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
'1', 'SIMPLE', 'a', 'ALL', 'chr_left_right', NULL, NULL, NULL, '4721638', NULL
'1', 'SIMPLE', 'g', 'ref', 'chr_left_right', 'chr_left_right', '4', 'methyl_base.a.chr', '604', 'Using index condition'
'1', 'SIMPLE', 'r', 'ref', 'chr_left_right', 'chr_left_right', '5', 'methyl_base.a.chr', '53172', 'Using index condition'

更新 2。使 mysqld 在多个线程中运行。

在查询期间查看了 CPU 使用率。由于我目前在独占模式下工作,因此我是唯一访问本地服务器的人。是否有可能以某种方式强制 mysqld 在多个线程中处理一个查询?然后他可以使用 8 核 / 16 线程,但他只使用了一个。

顺便说一句,将不同的表分散到不同物理硬盘驱动器上的文件夹中,虽然很小,但可以加速工作。

更新 3目前,我根据哪个染色体和脚本(更准确地说,一系列也以编程方式调用的脚本)以编程方式拆分所有源表,现在看起来像这样(假设正在处理第 7 条染色体):

INSERT INTO `pk47-pk51-gene-repeat` (
      `chr`,`left`, `right`,`count_k51`,`name_left`, `name_right`
)
SELECT 
     "7", a.`left`, a.`right`, a.`count` as `count_k51`,
     g.`name` as `name_left`, 
     r.`name` as `name_right` 
FROM `
     51k-80-80-ignore-random-noreverse-chr7` a, 
     `genes-g38-201505-chr7` g,
     `repeats-g38-201505-chr7` r 
WHERE
     a.`left` < g.`right` and a.`left` > g.`left` and 
     a.`right` < r.`right` and a.`right` > r.`left` 
     on duplicate key 
     update 
       `pk47-pk51-gene-repeat`.`count_k51`=a.`count`;

但我没有看到太大的进展。

mysql
  • 4 个回答
  • 10 Views
Martin Hope
Viktor Tomilov
Asked: 2020-01-24 20:15:50 +0000 UTC

是否可以使用 SQLite 从不同文件访问表?

  • 4

使用 MySQL,我可以访问来自不同模式的表。例如,当通过 ADO 在 Delphi 中使用 MySQL 时,即使我明确设置了默认模式(在本例中为 - dna_homo_2015may):

var
  ADO1:TADOConnection;

<...>
ADO1.ConnectionString:='Provider=MSDASQL.1;Password=password;'+
   'Persist Security Info=True;User ID=user1;Extended Properties="Driver=MySQL ODBC 5.3 ANSI Driver;'+
   'SERVER=localhost;UID=user1;PWD=password;DATABASE=dna_homo_2015may;'+
   'PORT=3306;COLUMN_SIZE_S32=1"';

我可以通过完全命名它们来访问来自多个模式的表:

Query:='select A.*, B.`id`, B.`name`'+
    'from `dna_homo_2015may`.`temp_pos` A, `dna_homo_2016june`.`genes_list` B'+
    'where <...>';

我可以使用 SQLite 并在 base1.sdb 中有两个表 table1 和 base2.sdb 中的 table2,执行相同的查询,同时获取这两个表吗?如果是这样,怎么做?

delphi
  • 1 个回答
  • 10 Views
Martin Hope
Viktor Tomilov
Asked: 2020-01-13 21:13:00 +0000 UTC

在致命崩溃后恢复 Windows Management Instrumentation (WMI)

  • 1

停止在运行 Windows 10 的计算机上工作WMI。
以前正常工作的脚本现在都不起作用了。返回的错误范围相当大:0x80041XXX、0x800420XX、0x700310XX(“ WMI 类初始化不可能”、“ WMI 调用被拒绝”、“ WMI 返回无效响应”、“ WMI.MOF 文件错误”等) .

有可能解决这个问题吗?为什么会这样?如果没有,是否可以在没有正常工作的情况下工作WMI?

windows
  • 1 个回答
  • 10 Views
Martin Hope
Viktor Tomilov
Asked: 2020-12-20 19:15:35 +0000 UTC

两个数组:初始化和删除有区别吗?

  • 2

我正在学习 C++。我们需要大数组。我想了解初始化和删除是否有区别(速度更重要,但没有问题也很重要):

int sequence[1000000];

和

std::array<int, 1000000> sequence;

还是根本没有区别?

更新 1

事实证明堆栈没有问题,我必须这样做:

auto sequence = std::make_unique<int[]>(1000000); 

然后数组会在动态内存中创建吗?

c++
  • 1 个回答
  • 10 Views
Martin Hope
Viktor Tomilov
Asked: 2020-12-07 16:03:21 +0000 UTC

扩展生物计算机的命令列表

  • 1

出于教育目的(教小学生和学生使用设备和试剂,进行实验),我们设计了一台生物计算机。它的逻辑,正如我在“布尔值/非二进制系统的触发器”主题中提到的,可以从二进制到五倍。寄存器的数量,形式上是任意的,但我们没有无限的资源,所以更容易说寄存器的数量是 8 个,“可寻址存储单元”的数量不超过 100 个。这一百个单元可以参考到几乎任何长度(也有合理限制)的数组,每个单元的位深度为 4 位(AGTC)。
目前,我们“教”它执行以下整数算术运算:ADD、SUB、MUL 和命令可以同时使用寄存器和两个数组执行 - 即 c[i]:= a [i]+b[i];逻辑运算 AND、NOT、OR(也可以用数组执行它们);无条件跳转 JMP;有条件地转换到寄存器相等,到它们的不等式,到寄存器相等到零。现在我们正在处理按位左移和右移。

当然,实现寄存器和内存之间交换的命令。没错,它们是最慢的。

从指定的指令集,我们是否可以创建其他操作,特别是我们是否对除法操作感兴趣?

更新 1

是的,我忘了提到一个重要条件:我们不能在一行中对一个或一对寄存器执行相同的算术运算超过 5-6 次。是的,您可以将结果转移到另一个寄存器,但这很慢(实际上是手动工作)。

更新 2

关于寄存器。寄存器与经典的汇编器非常相似,但其中 AL 是低字节,AH 是高字节,AX 是两个字节。我们有相同的,但你仍然可以参考任何一个小点,甚至是旧的。
好吧,我们的旗帜根本没有竖起。如果您在半字节中添加 9 和 9 并在半字节中请求结果,您将得到 4。不会引发任何标志。

更新 3

一次实现了右移和左移 4 位,循环和零填充。您可以重复任意次数。我们还不知道如何按位进行(仅在左侧 - 通过乘以 2,“更便宜”不起作用)。旗帜仍然没有竖起任何:)

ассемблер
  • 1 个回答
  • 10 Views
Martin Hope
Viktor Tomilov
Asked: 2020-12-04 13:29:46 +0000 UTC

在生物信息学中加载树木。第 1 部分。精确搜索

  • 15

该主题是作为讨论线程创建的。它提出了几个问题,因此您可以同时回答所有问题和其中一个问题。我给出了一些问题的答案,而不是它是正确的事实。如果有很多兴趣,您可以尝试组织聊天进行讨论。

生物信息学中最常见的任务:在字符串中查找子字符串。在大多数情况下,这是以一种标准方式实现的,不需要大量资源,也不值得详细考虑。但是,在我看来,有一类问题可以通过使用加载的树来加速/简化。
在本主题中,我们将仅考虑精确搜索。

术语解释:

参考:一个长的 DNA 序列,通常包含部分染色体或整个染色体/基因组的转录本。表示(通常)由 A、G、T、C(表示不同的核苷酸)和 N 组成的字符串 - 一个字符,表示任何核苷酸,或不存在确切信息。示例:AAGGCCTCGTCNTTNNGCCC...
模式(或读取):一个短的 DNA 序列,一个包含与上述相同字符的字符串,长度从 1(当然没有意义,但它发生)到几千的合理值。我们主要处理 30 到 300 个字母的长度,但还有其他任务。
回文-互补字符串,即 根据特殊规则倒序(从末尾读取字符串,按规则替换字母:A -> T,C -> G,G -> C,T -> A,N -> N)

对于航班的分析,我们将考虑人类第8条染色体作为参考(A:43333530,C:29030173,G:29103787,T:43300646,N:370500条,总共145138636个字母)。为简单起见,读取长度为 100 个字母。

马上我会告诉我我将在 Delphi 上编写代码。总的来说,我不在乎 - Delphi、c++、c# 或 java,但 Delphi 对我来说更熟悉。

问题 1. 创建树形结构。类或链表。

2个树实现选项:

班级

  type
    AGTCIndex = (A, C, G, T);
  TTrie = class
     fAmI: integer; // кто я - на всякий случай
     fParent: TTrie; // ссылка на родительский узел
     fChildren:array[AGTCIndex] of TTrie; // ссылка на узлы потомков
     fCount: array of longint; // для адресации 145 миллионов хватит. Вот если бы работали с геномом секвойи, стоило бы использовать int64 :)
     <...>
   end;

或链表

  type
    AGTCIndex = (A, C, G, T);
    pTrie = ^TTrie;
    TTrie = record
     fAmI: integer; // кто я - на всякий случай
     fParent: pTrie; // ссылка на родительский узел
     fChildren:array[AGTCIndex] of pTrie; // ссылка на узлы потомков
     fCount: array of longint; 
   end;

在我看来,链表更适合我们的任务:内存消耗更少,工作速度更快(我们不要在不必要的调用上浪费时间)。当然,为方便起见,我们将列表包装在一个类中。

问题二、内存消耗

在标准方法中,将花费 145 戈比的内存——这就是一条线需要多少。您可以使用半字节表示(描述及其工作原理)来欺骗和使用 2 倍。

在使用树的情况下,成本将至少为 100 * 145138636 * 16 或至少 230 GB。一切,羊皮得不偿失。可以使用的最大值为 32 GB。我们得出结论,只要参考的长度不超过 1600 万,这种方法是适用的。
原则上,这里也实现了半字节的方法。它甚至可以带来超过 2 倍的收益。但恐怕带来的不便多于好处。如果有其他意见 - 请提出意见。

问题3:精细的搜索性能

在标准方法中,在参考中找到所有包含的模式大约需要 |length(reference)*ln(length(pattern)|。如果并行化,那么内核每增加一倍大约要快 1.6 倍。

在使用树的情况下,根据我的计算,只有在前额上至少需要 O(100 * 长度)才能进行构造。使用阅读框可以减少到 O(30*length)。并行方法还将内核每增加一倍,该过程就会加快 1.6 倍。

总的来说,我们有:创建一棵树比使用标准方法搜索一个模式要多花大约 500 到 1000 倍的时间。但是,由于在已经形成的树中搜索要快得多,而且它允许您并行获取额外的数据,所以我们有: 当引用被重复使用时,创建树的好处是实现的,并且用于不同的模式。评价:至少500次。适用范围:精确映射、仪器数据的流式处理等。

没错,互补搜索存在一个小问题。事实上,我们将不得不从孩子到父母,这会有点慢。

如果主题很有趣,您可以继续进行模糊搜索,这通常更相关和更有趣。

更新 1

创建了一个聊天室

更新 2

**相对于按位表示。大声推理(几乎与树木无关)**

为什么不节省内存和时间,并使用半字节甚至四分之一字节表示?
- 我不确定。我还没有遇到过使用类似方法的单一 GNU 软件(关于付费软件 - 见下文)。所有人都否认兼容性和不愿意为按位工作编写复杂的例程。而最近他们也回答——“内存降价了”。

  • 我对为什么每个人都不使用按位方法的看法:

    1. 兼容性并不是特别重要。毕竟,无损转换:您可以随时转换回来。但!通常,相同的程序不仅用于在 DNA 内进行搜索,还用于在蛋白质序列、基因依赖性等内进行搜索。在那里 - 拉丁字母是不够的。

    2. AGTC 是一个非常特殊的情况。还有甲基化核苷酸、双脱氧核苷酸、“可疑”核苷酸等等。那些。“字母”远不止 4 个字母。因此,例程是“为一切”创建的。

在上面的第一个链接上,我举了一个使用半字节表示的例子,我在 2004 年“开发”了一个完整的基因组 triter(Windows 下的第一个 - 我有点自豪:))是创建于 2006 年。然后内存很少,处理器非常愚蠢。主要思想:A=0001b,C=0010b,G=0100b,T=1000b。然后掩码非常成功地叠加在一次搜索多个选项上:N = 1111b、R(A 或 G)= 0101b、Y(C 或 T)= 1010b 等。在 SSE2 中实现了一个大字(64 或 128 位)的半字节移位,它允许您一次处理多达 32 个字母。
所以,关于这个实现,我怀疑这种方法至少用在一个商业包中:) 但是,我并不感到抱歉,特别是因为这种方法是表面上的。

更新 3

发布了问题的第二部分:生物信息学中的加载树。第 2 部分。模糊搜索

java
  • 4 个回答
  • 10 Views
Martin Hope
Viktor Tomilov
Asked: 2020-11-25 20:31:50 +0000 UTC

非二进制系统的布尔值/触发器

  • 1

随着生物信息学和生物计算机的普及,我们计划在5-8年级的学生中开设一系列课程。特别是,将有关于创建具有可变逻辑的生物计算机的实践练习。将介绍具有二进制、三元、四元和五重逻辑的最简单的生物计算机。基本的算术运算已经被定义和阐明,争议在于逻辑运算。对于二元逻辑,一切都清楚了,对于三元逻辑,PROBABLY 被添加到 FALSE 和 TRUE,但是在四元和五元逻辑的情况下添加 USEFUL 呢?

binary
  • 1 个回答
  • 10 Views
Martin Hope
Viktor Tomilov
Asked: 2020-11-23 21:07:15 +0000 UTC

在设计时编辑另一个组件的属性时创建链接组件

  • 2

设计我自己的新 TSeqLink 可视化组件。它拥有,除其他外,财产

published
property Handler: TLinkHandler read FHandler write SetLinkHandler;

这也指向它自己的非可视 TLinkHandler 组件,该组件负责处理 TSeqLink 实例之间的链接。在表单上放置一个新的 TSeqLink 实例后,用户必须在 Object Inspector 窗口中为 Handler 属性分配一个值(如果他想在设计时执行此操作)。假设表单已经放置了一个 TLinkHandler 的实例,那么为了在其中选择一个值,我必须在 SetlinkHandler 过程中分析表单上的所有组件。像这样的东西:

with Owner do
if csDesigning in ComponentState then
begin
for i:=0 to ComponentCount-1 do
if Components[i] is TLinkHandler then
<обработка>
end; 

如果表单上有多个 TLinkHandler 实例怎么办?我应该如何处理这种情况,以便列出可能的选项?如果表单上没有 TLinkHandler 的单个实例,我可以在 Object Inspector 中以某种方式创建它的新实例,以便它出现在表单上吗?

delphi
  • 1 个回答
  • 10 Views
Martin Hope
Viktor Tomilov
Asked: 2020-11-22 15:35:29 +0000 UTC

TDictionary 的非唯一键

  • 2

以下类历来用于处理点突变图:

type
  TVCFRec = record
      id, alt, filter, info:string;
      qual: double;
      <...>
  end;
  TVCFRef = TDictionary<string,TVCFRec>; // #reference
  TVCFPos = TDictionary<integer,TVCFRef>; // #position

  TVCFFile = class (TDictionary<string,TVCFPos>) // #chr
  private
       <...>
  protected
       <...>
  public
       <...>
  end;

事实上,这是一个三级 TDictionary,它从设备/设备/档案中获取原始数据并将所有内容放在货架上,提供快速访问(非常快,选择 TDictionary 是因为它的速度和便利性工作)、搜索、记录、处理,甚至输出到 3d 打印机 :)
它的三级特性允许您快速找到向量 {染色体、染色体中的位置、参考中的替换类型}(chr、位置, 参考)
直到现在,载体对于一位患者来说一直是唯一的,即 向量中所有三个变量的组合只能在一个人中出现一次。
现在有关于新突变的数据,而且我们已经扩展了我们的能力。结果,丢失了第三个参数的唯一性,即 在给定染色体上的给定位置,可以有不同的参考替换。TVCFRef不能再使用,因为其中的字符串键可能不是唯一的。
转到数据库,另一种方法等。行不通-很多已经与类似的方法相关联。生产第四层也不是一种选择。有必要完成该类的第三级,以便它允许您使用相同的引用引用相同位置的多个突变选项。
我想到的唯一选择是像这样定义 TVCFRec:

type
  TVCFR = record
      id, alt, filter, info:string;
      qual: double;
      <...>
      end;
  TVCFRec = array of TVCFR;

也就是说,如果突变不明确,则数组的长度将不同于一,我们将能够通过枚举处理所有突变。
解决方案对我来说似乎不正确。也许有替代品?

delphi
  • 1 个回答
  • 10 Views
Martin Hope
Viktor Tomilov
Asked: 2020-11-02 15:33:04 +0000 UTC

将三个表中的数据加到第四个表中

  • 1

给定:三个大表(第一,第二,第三)的形式

    CREATE TABLE `first` (
  `id` bigint(20) NOT NULL,
  `chr` int(11) NOT NULL,
  `left` bigint(20) NOT NULL,
  `right` bigint(20) NOT NULL,
  `count` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

包含数据和第四个(相同) - 空。

chr, left, right - 这三个参数的组合是唯一的,即 {1, 4567, 4689} 在每个表中最多出现一次。任务:对每个组合 {chr, left, right} 对所有三个表的计数字段求和,并将数据输入到第四个表中。此外,当在一个或两个表中找不到特定组合时,可能会出现这种情况。

如何通过第三方手段做到这一点 - 我知道。可以用 MySQL 做到这一点吗?

mysql
  • 3 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5