On Wed, Jan 30, 2013 at 8:39 AM, Rudra Banerjee
<rudra.baner...@aol.co.uk> wrote:
> Dear friends,
> I am trying hard to get rid of file reading and editing (as evident from
> my previous post)
> Here is a small code where I tried to open my file in a buffer and scan.
> Its small, 50 line code.
> I will be grateful if anybody kindly have a look and tell if this is
> really opening the file from buffer or still using the file. Please
> help.

I can't tell you what it is 'still' doing, however in the code portions
which you've posted here, you are first reading the contents of the
file into a buffer using g_file_get_contents(); and then parsing
that buffer afterwards.

I assume this is what you're after, however I should point out
that naming your allocated buffer 'fd' is thoroughly confusing
to the reader.

At first glance, it would appear that your scanner is operating
on an fd, i.e. a file descriptor, not an allocated buffer.

Cheers,
        -Tristan

>
>
> void open_file(GtkWidget *widget, gpointer data){
>   GScanner *scanner;
>   GHashTable *table;
>   char* fd;
>   gsize length;
>   GError* error=NULL;
>     GtkWidget *dialog; //, *entry;
>     GtkFileFilter *filter;
>     dialog = gtk_file_chooser_dialog_new("Open File", NULL,
>             GTK_FILE_CHOOSER_ACTION_OPEN,
>             GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
>             GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
>             NULL);
>
>     filter = gtk_file_filter_new();
>     gtk_file_filter_set_name(filter, "All files (*.*)");
>     gtk_file_filter_add_pattern(filter, "*");
>     gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
>
>     filter = gtk_file_filter_new();
>     gtk_file_filter_set_name(filter, "Bibtex file (*.bib)");
>     gtk_file_filter_add_pattern(filter, "*.bib");
>     gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
>     gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);
>
>     if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
>     filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
>     gtk_list_store_clear (store);
>     g_file_get_contents(filename, &fd, &length , &error);
>     g_assert(!error);
>
>      scanner = g_scanner_new (NULL);
>      g_scanner_input_text (scanner, fd, CHAR_BUFF);
>
>      table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
> g_free);
>      do
>        {
>          g_hash_table_remove_all (table);
>            parse_entry (scanner, table);
>            output_entry (table);
>
>          g_scanner_peek_next_token (scanner);
>        }
>      while (scanner->next_token != G_TOKEN_EOF &&
>             scanner->next_token != G_TOKEN_ERROR);
>
>
>   /* finsish parsing */
>      g_scanner_destroy (scanner);
>      g_hash_table_destroy (table);
>
>     gtk_label_set_text(GTK_LABEL(flabel), filename);
>     gtk_widget_destroy(dialog);
>     }
>     else
>     gtk_widget_destroy(dialog);
> }
>
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list@gnome.org
> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to