Agrégateur de logs
Fait partie de la section Logique et Flux du Journey Swift de Coddy — leçon 55 sur 56.
Défi
MoyenVous traitez des journaux d'accès (logs). Lisez une seule ligne d'entrée : une liste d'entrées level:user:bytes séparées par des virgules.
Certaines entrées sont incorrectes et doivent être ignorées : toute entrée dont les bytes ne peuvent pas être analysés comme un entier, ou dont le level n'est pas l'un des suivants : INFO, WARN, ERROR (sensible à la casse).
Affichez, dans cet ordre :
- Une ligne par niveau (level) apparu au moins une fois, triée selon cet ordre fixe :
ERROR,WARN,INFO. Chaque ligne est au format<level>: <count> (<bytes>)oùcountest le nombre d'entrées valides à ce niveau etbytesest la somme de leurs octets. Top user: <name> (<bytes>): l'utilisateur ayant le plus grand nombre total d'octets sur toutes les entrées valides. En cas d'égalité, tranchez par ordre alphabétique du nom.Skipped: <n>avec le nombre d'entrées malformées.
Pour l'entrée INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75, la sortie est :
ERROR: 1 (50)
INFO: 3 (375)
Top user: alice (225)
Skipped: 2Essayez vous-même
let entries = readLine()!.components(separatedBy: ",")
let order = ["ERROR", "WARN", "INFO"]
let validLevels: Set<String> = ["INFO", "WARN", "ERROR"]
// TODO: analyser chaque entrée, ignorer les mauvaises, accumuler par niveau + par utilisateur ;
// afficher les niveaux dans l'ordre fixe (uniquement si vus), l'utilisateur principal, puis le compte Skipped
Toutes les leçons de Logique et Flux
1Les chaînes de caractères en profondeur
Comptage et indicesCasse et nettoyageRecherche dans les chaînesDécoupage et jointureRemplacement de sous-chaînesRécapitulatif - Vérification du nom d'utilisateur4Ensembles
Création d'ensemblesUnion et intersectionSoustraction et différence symétriqueSous-ensemble et sur-ensembleRécapitulatif - Filtre de tags7Projet - Suivi d'habitudes
Aperçu du projetMarquer comme terminé10Projet - Moteur de quiz
Présentation du projetPoser des questions2Intervalles et Pas
Fermé vs Semi-ouvertLe PasMéthodes d'intervalleIntervalles dans un SwitchRécapitulatif - Grille de calendrier5Fonctions d'ordre supérieur, Partie 1
MapFilterReduceChaînage de map, filter, reduceRécapitulatif - Statistiques de mots