Re: Conversion functions.



Magnus Myrefors escribió:
Hi,
  Ok, here's a small part of it. The whole file is about
2400 rows. I can read over approximately 95 % of it ok
but the rest is somewhat corrupted. I think it is
the function g_ascii_isdigit() that fails sometimes which leaves a uncompleted conversion. I am about to try another
way without this function.

/Magnus
On Wed, 05 Sep 2007 16:29:02 -0300
Matí­as Alejandro Torres <torresmat gmail com> wrote:

What's the input file like? Can you attach a part of it? If you do
so, I can make a try on reading it.

Matías
------------------------------------------------------------------------

 Longtitude  Latitude   Altitude  IntervalTime  HeartRate  Speed

--------------------------------------------------------------

1134:17.64662 59.84263 15  10  0  11.45

1135:17.64661 59.84266 15  10  0  12.59

1136:17.64661 59.84269 14  10  0  10.89

1137:17.64660 59.84272 14  10  0  10.83

1138:17.64659 59.84275 13  10  0  12.58

1139:17.64659 59.84278 13  10  0  11.19

1140:17.64658 59.84281 13  10  0  11.76

1141:17.64656 59.84284 13  10  0  12.08

1142:17.64655 59.84286 12  10  0  11.95
Here's the minimal program to read that. The reading part is kind of crappy but it works with that example. The reading part reads char by char. Using the g_ascii_is_digit only to skip the header.



Matias

/* BEGIN */

#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <glib.h>
#include <glib/gstdio.h>

typedef enum {
   MODEL_LOG,
   MODEL_LATITUDE,
   MODEL_ALTITUDE,
   MODEL_INTERVAL,
   MODEL_HEARTBEAT,
   MODEL_SPEED,
   MODEL_NUM_COLUMNS
} ModelColumns;

typedef struct _Data {
   gchar         *log;
   gdouble     latitude;
   gint         altitude;
   gint         interval;
   gint         heartbeat;
   gdouble     speed;
} Data;


GtkTreeModel *
do_model (GSList *list)
{
   GSList *act;
   GtkListStore *store;

store = gtk_list_store_new (MODEL_NUM_COLUMNS, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_DOUBLE); act = list;
   while (act != NULL) {
       GtkTreeIter iter;
       Data * data = act->data;
gtk_list_store_append (store, &iter);
       gtk_list_store_set (store, &iter,
                           MODEL_LOG, data->log,
                           MODEL_LATITUDE, data->latitude,
                           MODEL_ALTITUDE, data->altitude,
                           MODEL_INTERVAL, data->interval,
                           MODEL_HEARTBEAT, data->heartbeat,
                           MODEL_SPEED, data->speed, -1);
act = g_slist_next (act);
   }
return GTK_TREE_MODEL (store);
}

GtkWidget *do_window (GtkTreeModel *model) {
   GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   GtkWidget *tree_view = gtk_tree_view_new ();
   GtkWidget *scroll;
   GtkCellRenderer *rend;
   GtkTreeViewColumn *col;

   tree_view = gtk_tree_view_new ();
   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
   gtk_tree_view_columns_autosize (GTK_TREE_VIEW (tree_view));

   rend = gtk_cell_renderer_text_new ();
col = gtk_tree_view_column_new_with_attributes ("Longitude", rend, "text", MODEL_LOG, NULL);
   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), col);

   rend = gtk_cell_renderer_text_new ();
col = gtk_tree_view_column_new_with_attributes ("Latitude", rend, "text", MODEL_LATITUDE, NULL);
   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), col);

   rend = gtk_cell_renderer_text_new ();
col = gtk_tree_view_column_new_with_attributes ("Altitude", rend, "text", MODEL_ALTITUDE, NULL);
   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), col);
rend = gtk_cell_renderer_text_new (); col = gtk_tree_view_column_new_with_attributes ("Interval", rend, "text", MODEL_INTERVAL, NULL);
   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), col);
rend = gtk_cell_renderer_text_new (); col = gtk_tree_view_column_new_with_attributes ("Heartbeat", rend, "text", MODEL_HEARTBEAT, NULL);
   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), col);
rend = gtk_cell_renderer_text_new (); col = gtk_tree_view_column_new_with_attributes ("Speed", rend, "text", MODEL_SPEED, NULL);
   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), col);
gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), model);
   gtk_widget_set_size_request (tree_view, -1, 300);
scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (scroll), tree_view);
   gtk_container_add (GTK_CONTAINER (window), scroll);
return window;
}

GSList* reader (FILE *file)
{
   Data *data;
   gchar c;
   gchar tmp [50];
   int campo = 0, cont = 0;
   GSList *list = NULL;
while (c != EOF) {
       campo = 0;
       cont = 0;
c = fgetc (file);
       while ((c != '\n') && (c != EOF) && (g_ascii_isdigit (c))) {
           while ((c != ' ') && (c != '\t') && (c != '\n') && (c != EOF)) {
               tmp [cont++] = c;
               c = fgetc (file);
           }
           tmp [cont++] = '\0';

           if (campo == 0) {
               data = g_new0 (Data, 1);
               list = g_slist_append (list, data);
           }
           switch (campo) {
               case 0:
                   data->log = g_strdup (tmp);
                   break;
               case 1:
                   data->latitude = g_strtod (tmp, NULL);
                   break;
               case 2:
                   data->altitude = atoi (tmp);
                   break;
               case 3:
                   data->interval = atoi (tmp);
                   break;
               case 4:
                   data->heartbeat = atoi (tmp);
                   break;
               case 5:
                   data->speed = g_strtod (tmp, NULL);
                   break;
               default:
                   printf ("Damn!\n");
           }
while (((c == ' ') || (c == '\t')) && (c != EOF))
               c = fgetc (file);
           cont = 0;
           campo++;
       }
   }
return list;
}

gint
main (gint argc, gchar **argv)
{
   gchar *filename = "sequence.txt";
   FILE *file;

   file = g_fopen (filename, "r");
gtk_init (&argc, &argv); if (file != NULL) {
       GSList *list;
       GtkTreeModel *model;
       GtkWidget *window;
list = reader (file); model = do_model (list);
       window = do_window (model);
g_signal_connect (window, "delete-event", (GCallback) gtk_main_quit, NULL);
       gtk_widget_show_all (window);
g_slist_foreach (list, (GFunc) free, NULL);
       g_slist_free (list);
gtk_main ();
   }
return 0;
}






[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]