【问题标题】:Copying text from a Memo by line/index按行/索引从备忘录复制文本
【发布时间】:2021-08-12 04:03:00
【问题描述】:

我想知道是否有办法从特定的备忘录行复制文本。例如,我想将备忘录第 3 行的内容存储到一个字符串中,然后对该字符串进行一些操作并将其复制到另一个备忘录/编辑中。

我已经尝试了一些变体,但都不起作用:

str_temp = Memo1->Lines[2].Text;
Memo2->Lines->Append(str_temp);

当我从Lines[0] 询问时,它只是将备忘录中的所有内容复制到字符串中:

str_temp = Memo1->Lines[0].Text;
Memo2->Lines->Append(str_temp);

【问题讨论】:

  • 将 Lines[0] 推到字符串流上,然后读取 line 或使用 find 函数(新的分隔符通常是 '\n')stackoverflow.com/a/46931770/14237276
  • 我使用的是一个非常旧的版本,如果我没记错的话LinesTStrings*,所以我使用Lines->Strings[index]

标签: c++ c++builder rad-studio


【解决方案1】:

Lines 属性是一个指向TStrings 对象的指针。所以Memo1->Lines[2].Text(*(Memo1->Lines+2)).Text指针算术 是一样的,这在语法上是有效的,但在逻辑上是错误的,因为它最终会访问无效的内存。而Memo1->Lines[0].Text(*(Memo1->Lines)).Text(又名Memo1->Lines->Text)是一样的,这既合法又有效,但不是您想要的结果。

TStrings 有一个 Strings[] 属性,这是您需要使用的,例如:

String str_temp = Memo1->Lines->Strings[2];

或者,TStrings 有一个 operator[] 在内部使用 Strings[],例如:

String str_temp = (*(Memo1->Lines))[2];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多