5 void bed_get_entry( FILE *fp, struct bed_entry3 *bed, int cols )
7 /* Martin A. Hansen, June 2008 */
9 /* Get next 3 column bed entry from stream. */
11 char bed_buffer[ BED_BUFFER ];
12 struct bed_entry12 *bed12 = NULL;
16 if ( ( fgets( bed_buffer, sizeof( bed_buffer ), fp ) != NULL ) )
18 printf( "buffer: %s\n", bed_buffer );
20 bed_split( bed_buffer, bed12, 3 );
29 void bed_split( char *string, struct bed_entry12 *bed, int cols )
38 int field_seps[ cols ];
42 if ( ( new_line = memchr( string, '\n', 1024 ) ) != NULL ) {
43 new_line_pos = new_line - string;
45 die( "bed_split: no newline found." );
51 for ( i = 0; i < cols; i++ )
53 if ( ( pt = memchr( &string[ offset ], '\t', new_line_pos - offset ) ) != NULL )
57 pos = MIN( pos, new_line_pos );
59 field_seps[ field_num ] = pos;
65 die( "bed_split: no tab found." );
73 for ( i = 0; i < cols; i++ )
75 field_len = field_seps[ i ] - offset;
77 field = mem_get( field_len );
79 field[ field_len ] = '\0';
81 memcpy( field, &string[ offset ], field_len );
84 bed->chr = mem_clone( ( char * ) field, field_len );
85 } else if ( i == 1 ) {
86 bed->chr_beg = strtod( field, &pt );
87 } else if ( i == 2 ) {
88 bed->chr_end = strtod( field, &pt );
89 } else if ( i == 3 ) {
90 bed->q_id = mem_clone( ( char * ) field, field_len );
91 } else if ( i == 4 ) {
92 bed->score = strtof( field, &pt );
93 } else if ( i == 5 ) {
94 bed->strand = field[ 0 ];
95 } else if ( i == 6 ) {
96 bed->thick_beg = strtod( field, &pt );
97 } else if ( i == 7 ) {
98 bed->thick_end = strtod( field, &pt );
99 } else if ( i == 8 ) {
100 bed->itemrgb = mem_clone( ( char * ) field, field_len );
101 } else if ( i == 9 ) {
102 bed->blockcount = strtod( field, &pt );
103 } else if ( i == 10 ) {
104 bed->blocksizes = mem_clone( ( char * ) field, field_len );
105 } else if ( i == 11 ) {
106 bed->q_begs = mem_clone( ( char * ) field, field_len );
110 die( "bed parse failed." );
113 offset = field_seps[ i ] + 1;
116 printf( "chr ->%s\n", bed->chr );
117 printf( "chr_beg->%u\n", bed->chr_beg );
118 printf( "chr_end->%u\n", bed->chr_end );