Посимвольное чтение строки из файла с нюансами - C (СИ)
Формулировка задачи:
Доброго времени суток.
Есть файл, состоящий из нескольких строк.
Каждая строка записана по шаблону:
Это файл /etc/group в linux, да.
Как реализовать то, что указано в комментарии?
Буду рад любой помощи и подсказкам!
group_name:password:group_id:list
#include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { FILE *file; char *fname = "/etc/group"; char sting[100]; file = fopen(fname,"r"); if(file == 0) { printf("Не хватет прав для открытия '%s'",fname); return 0; } int i=0; char *name[100]; /* Читаем строку из файла Читаем строку по символам Как только встретилось 3-е "двоеточие", считаем слова, идущие через "запятую", записываем их в переменную NAME и увеличиваем счетчик на 1 (т.е. как встретили "запятую", записали то, что было после 3-го "двоеточия" и до "запятой", увел. счетчик) Выводим NAME и счетчик пример: в файле много строк и есть одна такая "users::20:root,user1,user2". должно вывести "имя группы:users, число пользователей - 3" */ fclose(file); return 0; }
Решение задачи: «Посимвольное чтение строки из файла с нюансами»
textual
Листинг программы
#include<stdio.h> #include<conio.h> #include<alloc.h> main() { FILE *list; //структуры struct g {char *name; int size; struct u *users;} *group; struct u {char *user;} *users; //размеры int n=10; //групп int m=10; //юзеров int l=10; //длина имени и названия //выделяю память group=(g *)calloc(n,sizeof(g)); for(int i=0;i<n;i++) { group[i].name=(char *)calloc(l,sizeof(char)); group[i].users=(u *)calloc(m,sizeof(u)); for(int j=0;j<m;j++) group[i].users[j].user=(char *)calloc(l,sizeof(char)); } //открываю и читаю файл file.txt list=fopen("file.txt","r"); char symb; int dv=0; int sl,sm,sn,save; sl=sm=sn=0; while(1) { symb=fgetc(list); if(feof(list)!=0) break; if(symb!='\n') { if(symb==',') {sl=0; sm++;} if(symb==':') {dv++; sl=0;} if(dv==0) {group[sn].name[sl]=symb; sl++;} if(dv==3) { if(symb=='.') {group[sn].size=sm; dv=0; sn++; sl=0; sm=0;} if(symb!=',' && symb!='.' && symb!=':') {group[sn].users[sm].user[sl]=symb; sl++;} } } } fclose(list); for(i=0;i<sn;i++) { printf("Группа: %s\n",group[i].name); printf("Число пользователей: %d\n",group[i].size+1); printf("Пользователи:\n"); for(int j=0;j<group[i].size+1;j++) printf("%s\n",group[i].users[j].user); printf("\n"); } getch(); return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д