如何从 gtktextview/gtksourceview 解析 C 中的文本



我正在使用gtk+-2.0和gtksourceview-2.0用C编写文本编辑器。我正在尝试对从缓冲区中提取的数据运行许多测试。 目前,我正在移动一对迭代器,然后获得由这些迭代器分隔的文本块。然后使用 strstr, strchr 检查此字符串,... 但是,移动迭代器,然后读取数据,然后执行测试的过程非常繁琐。

我还将整个文档(使用前面描述的过程(提取到gchar *。 处理这些数据会更容易吗? 我试图在这些数据上使用 fgets 和 getline,但编译器抱怨:

warning: passing argument 3 of ‘fgets’ from incompatible pointer type /usr/include/stdio.h:624:14: note: expected ‘struct FILE * __restrict__’ but argument is of type ‘gchar *’

warning: passing argument 1 of ‘getline’ from incompatible pointer type /usr/include/stdio.h:671:20: note: expected ‘char ** __restrict__’ but argument is of type ‘gchar *’

我试过了:

  int bytes_read;
  int nbytes = 100;
  char *my_string;
  GtkTextIter start;
  GtkTextIter end;
  wholeDoc = gtk_text_buffer_get_text(tbuffer,&start,&end,TRUE);
  my_string = (char *) malloc (nbytes + 1);
  bytes_read = getline (&my_string, &nbytes, wholeDoc);

但出现以下错误:

warning: pointer targets in passing argument 2 of ‘getline’ differ in signedness /usr/include/stdio.h:671:20: note: expected ‘size_t * __restrict__’ but argument is of type ‘int *’

我正在寻找一种方法来检查前一行,例如,只需从循环索引中减去一行,就像每一行都是数组的一个元素一样。 如何将数据转换为此表单? 请耐心等待,我在学习。 谢谢。

下面是一个简单的示例,如何从 GtkTexBuffer 获取行。

  GtkTextIter start_iter, next_iter;
  gchar *text;
  gtk_text_buffer_get_iter_at_offset (source_buffer, &start_iter, 0);
  next_iter = start_iter;
  while (gtk_text_iter_forward_line (&next_iter))
    {    
      text = gtk_text_iter_get_text (&start_iter, &next_iter);
      // line processing
      g_free (text);
      start_iter = next_iter;
    }    

有关更多详细信息,请阅读GtkTextIter的文档。

您可以将字符串拆分为字符串数组,每行一个。使用 g_strsplit() .但是,如果要将数据关联回缓冲区中的位置,最好使用缓冲区迭代器。

相关内容

  • 没有找到相关文章

最新更新