rishtik/src/parser/parser.c

92 lines
2 KiB
C
Raw Normal View History

2021-02-16 16:26:48 +00:00
/**
* @file parser.c
* @author rick <rick@gnous.eu>
* @date 2021
*/
#include "parser.h"
2021-02-16 15:12:37 +00:00
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**
2021-02-16 16:26:48 +00:00
* get_input(): Permet de récupérer la saisie de lutilisateur
* @user_input: string sera enregistrée lentrée de lutilisateur
2021-02-16 15:12:37 +00:00
*/
char* get_input()
2021-02-16 15:12:37 +00:00
{
char *buffer = (char *) malloc(MAX_LENGTH);
memset(buffer, 0, MAX_LENGTH);
2021-02-16 15:12:37 +00:00
printf("\n> ");
fgets(buffer, MAX_LENGTH, stdin);
while (buffer[0] == '\n')
{
printf("\n> ");
fgets(buffer, MAX_LENGTH, stdin);
}
buffer[strlen(buffer)-1] = '\0'; /* pour ne pas avoir un retour à la ligne */
return buffer;
2021-02-16 15:12:37 +00:00
}
/**
2021-02-16 16:26:48 +00:00
* parse_char(): Récupère lentrée de lutilisateur avant de la parser
* @args: Tableau de string
* @find: caractère utilisé pour parser
2021-02-16 15:12:37 +00:00
*
2021-02-16 16:26:48 +00:00
* Récupère lentrée de lutilisateur avant de la parser avec le caractère
* find. Chaque string sera mise dans une case de args.
2021-02-16 15:12:37 +00:00
*/
void parse_char(char *args[], char find)
{
char *user_input = get_input();
2021-02-16 15:12:37 +00:00
char *token = strtok(user_input, &find);
int i = 0;
while (token != NULL && i < MAX_LENGTH)
{
strcpy(args[i], token);
i++;
token = strtok(NULL, &find);
}
// le dernier argument doit être NULL
// car il est vide et provoque une erreur si non NULL
free(args[i]);
args[i] = NULL;
free(token);
free(user_input);
}
2021-02-16 16:26:48 +00:00
/**
* tok_space(): Découpe la chaine orig et met chaque mot dans le tableau dest
* @orig: chaine à découper
* @dest: tableau de string sera stocker les mots
*
* La chaine de caractères orig est découper avec les espaces et chaques
* mots sont mis dans le tableau dest.
*/
void tok_space(char *orig, char *dest[])
2021-02-16 15:12:37 +00:00
{
char find = ' ';
char *token = strtok(orig, &find);
int i = 0;
while (token != NULL && i < MAX_LENGTH)
{
strcpy(dest[i], token);
i++;
token = strtok(NULL, &find);
}
// le dernier argument doit être NULL
// car il est vide et provoque une erreur si non NULL
free(dest[i]);
dest[i] = NULL;
free(token);
}