1
0
This repository has been archived on 2024-10-25. You can view files and clone it, but cannot push or open issues or pull requests.

154 lines
2.9 KiB
C
Raw Normal View History

2023-08-03 23:16:27 +02:00
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* parse.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: tomoron <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/07/29 11:14:01 by tomoron #+# #+# */
/* Updated: 2023/07/30 20:22:03 by tomoron ### ########.fr */
/* */
/* ************************************************************************** */
#include "header.h"
int ft_calc_part_len(char *str, int mode)
{
int res;
res = 0;
if (mode == 1)
{
while (*str >= '0' && *str <= '9')
{
res++;
str++;
}
}
if (mode == 2)
{
while (*str >= 32 && *str <= 126)
{
res++;
while (*str == ' ')
str++;
str++;
}
}
return (res + 1);
}
int ft_copy_nb(char *res, char *file, int k)
{
int j;
j = 0;
while (file[k] >= '0' && file[k] <= '9')
{
res[j] = file[k];
k++;
j++;
}
res[j] = 0;
while (file[k] == ' ')
k++;
if (file[k] != ':' || j == 0)
return (0);
k++;
while (file[k] == ' ')
k++;
return (k);
}
int ft_copy_value(char *res, char *file, int k)
{
int j;
j = 0;
while (file[k] >= 32 && file[k] <= 126)
{
res[j] = file[k];
if (file[k] == ' ')
{
while (file[k] == ' ')
k++;
if (file[k] == '\0' || file[k] == '\n')
j--;
k--;
}
k++;
j++;
}
res[j] = 0;
if ((file[k] != '\n' && file[k] != '\0') || j == 0)
return (0);
while (file[k] == '\n')
k++;
return (k);
}
int ft_fill_dict(char **res, char *file, int i, int k)
{
while (file[k] == ' ')
k++;
res[i] = malloc(ft_calc_part_len(file + k, 1) * sizeof(char));
if (!res[i])
return (ft_error(res, file, i - 1));
k = ft_copy_nb(res[i], file, k);
if (!k)
return (ft_error(res, file, i));
i++;
res[i] = malloc(ft_calc_part_len(file + k, 2) * sizeof(char));
if (!res[i])
return (ft_error(res, file, i - 1));
k = ft_copy_value(res[i], file, k);
if (!k)
return (ft_error(res, file, i));
return (k);
}
char **ft_parse_dict(char *filename)
{
char **res;
char *file;
int i;
int k;
file = ft_read_file(filename);
if (!file)
return (0);
res = malloc(ft_count_parts(file) * sizeof(char *));
if (!res)
return (0);
k = 0;
while (file[k] == '\n')
k++;
i = 0;
while (file[k])
{
k = ft_fill_dict(res, file, i, k);
if (!k)
return (0);
i += 2;
}
res[i] = 0;
free(file);
return (res);
}
/*int main(void)
{
char **test;
int i;
i = 0;
test = ft_parse_dict("lol.dict");
while (test && test[i])
{
printf("%s, ", test[i]);
fflush(stdout);
i++;
}
return (0);
}*/