Я читаю файл построчно и разбиваю строку на токены.
int main()
{
FILE* fp;
char line[255];
fp = fopen("file.txt" , "r");
while (fgets(line, sizeof(line), fp) != NULL)
{
char val1[16];
char val2[9];
strcpy(val1, strtok(line, ","));
strcpy(val2, strtok(NULL, ","));
printf("%s|%s\n", val1, val2);
}
}
Содержимое моего входного файла (file.txt)
182930101222, KLA1512
182930101223, KLA1513
182930101224, KLA1514
182930101225, KLA1515
Когда я печатаю, получаю
| KLA1512
Вместо
182930101222| KLA1512
В чем проблема ?
char
совсем не сложно. Я мог бы написать функцию и опубликовать ее для вас, но как это поможет вам научиться? Ваш буферline[255]
может быть изменен вами любым способом, который вы считаете нужным. Вы уже изменяете его, вызывая для негоstrtok()
(переписывая разделители','
нулевыми символами ('\0'
), что превращает буфер в отдельные строки в стиле C (которые вы отслеживаете с помощью указателейval1
иval2
). Теперь просто напишите новая собственная функция для удаления начальных и конечных пробелов.... 25.08.2013char* remove_whitespace(char* str)
. С помощью этой сигнатуры функции вы берете указатель на строку в стиле C, функция изменяет строку по мере необходимости и возвращает указатель на ту же строку с удаленными пробелами. Если нет начального пробела, он просто вернет тот же адрес указателя, который был ему передан. В функции вы выполняете цикл от начала до первого непробельного символа (см.isspace()
). Когда вы найдете его, это новое начало строки (которое вам нужно отслеживать в указателе, потому что это указатель, который нужно вернуть). 25.08.2013'\0'
). Затем сканируйте назад, пока не найдете первый непробельный символ, или не найдете адрес начального указателя (в любом случае). Когда вы найдете его, просто напишите'\0'
по адресу, на единицу большему, чем этот, который завершает строку в этой точке (обрезая все пробелы, включая любые символы новой строки). 25.08.2013