4 void bed_get_entry( FILE *fp, struct bed_entry3 *bed, int cols )
6 /* Martin A. Hansen, June 2008 */
8 /* Get next 3 column bed entry from stream. */
10 char bed_buffer[ BED_BUFFER ];
11 struct bed_entry12 *bed12 = NULL;
15 if ( ( fgets( bed_buffer, sizeof( bed_buffer ), fp ) != NULL ) )
17 printf( "buffer: %s\n", bed_buffer );
19 bed_split( bed_buffer, bed12, 3 );
28 void bed_split( char *string, struct bed_entry12 *bed, int cols )
37 int field_seps[ cols ];
41 if ( ( new_line = memchr( string, '\n', 1024 ) ) != NULL ) {
42 new_line_pos = new_line - string;
44 die( "bed_split: no newline found." );
50 for ( i = 0; i < cols; i++ )
52 if ( ( pt = memchr( &string[ offset ], '\t', new_line_pos - offset ) ) != NULL )
56 pos = MIN( pos, new_line_pos );
58 field_seps[ field_num ] = pos;
64 die( "bed_split: no tab found." );
72 for ( i = 0; i < cols; i++ )
74 field_len = field_seps[ i ] - offset;
76 field = mem_get( field_len );
78 field[ field_len ] = '\0';
80 memcpy( field, &string[ offset ], field_len );
83 bed->chr = mem_clone( ( char * ) field, field_len );
84 } else if ( i == 1 ) {
85 bed->chr_beg = strtod( field, &pt );
86 } else if ( i == 2 ) {
87 bed->chr_end = strtod( field, &pt );
88 } else if ( i == 3 ) {
89 bed->q_id = mem_clone( ( char * ) field, field_len );
90 } else if ( i == 4 ) {
91 bed->score = strtof( field, &pt );
92 } else if ( i == 5 ) {
93 bed->strand = field[ 0 ];
94 } else if ( i == 6 ) {
95 bed->thick_beg = strtod( field, &pt );
96 } else if ( i == 7 ) {
97 bed->thick_end = strtod( field, &pt );
98 } else if ( i == 8 ) {
99 bed->itemrgb = mem_clone( ( char * ) field, field_len );
100 } else if ( i == 9 ) {
101 bed->blockcount = strtod( field, &pt );
102 } else if ( i == 10 ) {
103 bed->blocksizes = mem_clone( ( char * ) field, field_len );
104 } else if ( i == 11 ) {
105 bed->q_begs = mem_clone( ( char * ) field, field_len );
109 die( "bed parse failed." );
112 offset = field_seps[ i ] + 1;
115 printf( "chr ->%s\n", bed->chr );
116 printf( "chr_beg->%u\n", bed->chr_beg );
117 printf( "chr_end->%u\n", bed->chr_end );