Doxygen Source Code Documentation
mri_fromstring.c File Reference
#include "mrilib.h"
Go to the source code of this file.
Functions | |
MRI_IMAGE * | mri_1D_fromstring (char *str) |
Function Documentation
|
Produce a 1D (float) image from a string of the form "20@1,10@0,5@1". ------------------------------------------------------------------------------- Definition at line 7 of file mri_fromstring.c. References ENTRY, far, free, malloc, mri_fix_data_pointer(), mri_new_vol_empty(), NI_decode_string_list(), NI_delete_str_array, NI_str_array::num, realloc, RETURN, and NI_str_array::str. Referenced by mri_read_1D(), and mri_read_ascii().
00008 { 00009 int ii,nnn,count , ntot=0 ; 00010 float *far , value ; 00011 NI_str_array *sar ; 00012 char sep ; 00013 MRI_IMAGE *flim ; 00014 00015 ENTRY("mri_1D_fromstring") ; 00016 00017 sar = NI_decode_string_list( str , ",;" ) ; 00018 if( sar == NULL ) RETURN(NULL) ; 00019 if( sar->num == 0 ){ NI_delete_str_array(sar); RETURN(NULL); } 00020 00021 far = (float *) malloc(sizeof(float)) ; 00022 for( ii=0 ; ii < sar->num ; ii++ ){ 00023 00024 if( strstr(sar->str[ii],"@") != NULL || /* if has one of the */ 00025 strstr(sar->str[ii],"x") != NULL || /* allowed separator */ 00026 strstr(sar->str[ii],"X") != NULL || /* characters, then */ 00027 strstr(sar->str[ii],"*") != NULL ){ /* scan for count@value */ 00028 00029 nnn = sscanf( sar->str[ii] , "%d%c%f" , &count , &sep , &value ) ; 00030 if( nnn != 3 || count < 1 ){ free(far); RETURN(NULL); } 00031 00032 } else { /* just scan for value */ 00033 count = 1 ; 00034 nnn = sscanf( sar->str[ii] , "%f" , &value ) ; 00035 if( nnn != 1 ){ free(far); RETURN(NULL); } 00036 } 00037 00038 far = (float *) realloc( far , sizeof(float)*(ntot+count) ) ; 00039 for( nnn=0 ; nnn < count ; nnn++ ) far[nnn+ntot] = value ; 00040 ntot += count ; 00041 00042 } 00043 00044 NI_delete_str_array(sar) ; 00045 flim = mri_new_vol_empty( ntot,1,1 , MRI_float ) ; 00046 mri_fix_data_pointer( far , flim ) ; 00047 RETURN(flim) ; 00048 } |