Chaînes de caractères

Documents pareils
Codage d information. Codage d information : -Définition-

TP Codage numérique des caractères. Un ordinateur ne manipule que des 0 et des 1 : Comment alors code-t-il du texte?

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

ET LO GICIEL D UN S YS T EME IN FORMATIQUE

Représentation d un entier en base b

Microprocesseur + Logiciel

Architecture de l ordinateur

1 Introduction au codage

Algorithme. Table des matières

Licence Sciences et Technologies Examen janvier 2010

Informatique Générale

Partie 1. Professeur : Haouati Abdelali. CPGE Lycée Omar Ibn Lkhattab - Meknès haouaticpge@gmail.com

TP 1. Prise en main du langage Python

Le codage informatique


Une version javascript sera disponible directement dans le cours prochainement.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours Informatique 1. Monsieur SADOUNI Salheddine

Langage Éric Guérin 5 octobre 2010

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Plan du cours. Historique du langage Nouveautés de Java 7

Jeux de caracte res et encodage (par Michel Michaud 2014)

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

L informatique en BCPST

DM 1 : Montre Autoquartz ETA

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Logiciel de Base. I. Représentation des nombres

Bases de programmation. Cours 5. Structurer les données

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Définitions. Numéro à préciser. (Durée : )

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Programmation en Java IUT GEII (MC-II1) 1

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Programmation C. Apprendre à développer des programmes simples dans le langage C

Langages et Concepts de Programmation Introduction à la programmation en langage C

1 Recherche en table par balayage

Stage d informatique pour l ingénieur

Conventions d écriture et outils de mise au point

Cours Informatique Master STEP

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

2 Comment fonctionne un ordinateur, dans les grandes lignes

STAGE IREM 0- Premiers pas en Python

CHRONIQUE de la société royale LE VIEUX-LIÈGE

Découverte de Python

Initiation à la programmation en Python

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Introduction au langage C

Présentation du langage et premières fonctions

La mémoire. Un ordinateur. L'octet. Le bit

Introduction à l algorithmique et à la programmation (Info 2)

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2

Stage d informatique pour l ingénieur

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Présentation du cours

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Python - introduction à la programmation et calcul scientifique

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Représentation des Nombres

Conversion d un entier. Méthode par soustraction

Introduction à NetCDF

Compression Compression par dictionnaires

Introduction à MATLAB R

Utilisation d objets : String et ArrayList

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

TIC. Tout d abord. Objectifs. L information et l ordinateur. TC IUT Montpellier

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Intégrité, signature et processus d'archivage

Organisation des Ordinateurs

UE Programmation Impérative Licence 2ème Année

Standard sur les noms de domaine Internet (SGQRI 021) Alain La Bonté

Base de l'informatique. Généralité et Architecture Le système d'exploitation Les logiciels Le réseau et l'extérieur (WEB)

Structure du format BMP, sa lecture, sa construction et son écriture

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Chap III : Les tableaux

Solutions web : instructions aux développeurs

Architecture des ordinateurs Introduction à l informatique

Algorithmique I. Algorithmique I p.1/??

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

nom : Collège Ste Clotilde

1 Introduction et installation

Support pour les langues s écrivant de droite à gauche

Langage Java. Classe de première SI

Algorithmique et Programmation, IMA

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Théorie et codage de l information

Créer le schéma relationnel d une base de données ACCESS

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

Systèmes informatiques

TD : Codage des images


GlobalScape Secure FTP Server Buffer Overflow

V- Manipulations de nombres en binaire

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Transcription:

Chaînes de caractères Skander Zannad et Judicaël Courant 2013-11-11 Plan 1 Manipulation des chaînes 1 1.1 Manipulations élémentaires......................... 1 1.2 Méthodes utiles................................ 2 1.3 Algorithme de recherche d une sous-chaîne................ 3 2 Chaînes : le poids de l histoire 4 2.1 ASCII..................................... 4 2.1.1 Notation hexadécimale des octets.................. 4 2.1.2 A comme................................. 5 2.2 Les rustines.................................. 5 2.3 Unicode.................................... 6 2.3.1 UTF-32................................ 6 2.3.2 UTF-8................................. 6 2.3.3 UTF-8 ou UTF-32?.......................... 6 2.3.4 UTF-8 et UTF-32........................... 7 3 Retour sur les chaînes Python 7 3.1 Type str.................................... 7 3.2 str : chaîne d octets (pas de caractères).................. 7 3.3 Travailler avec des textes........................... 7 3.3.1 Utilisation d unicode......................... 8 3.3.2 Précautions d usage......................... 8 3.4 En Python 3.................................. 8 1 Manipulation des chaînes 1.1 Manipulations élémentaires Caractère : lettre, symbole, blanc, retour à la ligne... 1

Chaîne de caractères : suite de caractères (grosso modo : tableau de caractères). En python : pas d objet spécifique de type «caractère». des objets de type chaîne (str). Constantes chaînes : h e l l o world! " h e l l o world! " h e l l o world " " " h e l l o world " " " Très proche des tableaux en termes de manipulation : Concaténation de deux chaînes x et y : x + y x n : x +... + x (n fois x). Accès à une sous-chaîne (slicing) : x[i:j] (chaîne des caractères d indices appartenant à [[i,j[[). Mais : x[i] : chaîne constituée d un seul caractère, celui d indice i. Les chaînes ne sont pas modifiables (a[i]= t interdit). 1.2 Méthodes utiles En python tout est objet. Un objet est l association de données 1 et de fonctions associées à l objet appelées méthodes de l objet. Obtenir la liste des méthodes de x : dir(x). Pour les chaînes, on trouve notamment : isalpha, isdigit, isspace, islower, isupper : True ssi la chaîne est non-vide et que tous ses caractères sont des lettres (resp. des chiffres, des espaces, que toutes ses lettres sont des minuscules, que toutes ses lettres sont des majuscules). Exemple : >>> Hello world!. isalpha () False >>> the answer i s 42. islower () True lower, upper : change en minuscule (resp majuscule) chaque lettre : >>> Hello world!. lower () h e l l o world! 1. Appelées attributs de l objet. 2

join : >>> ;. join ([ a l i c e, bob, c h a r l i e ]) a l i c e ; bob ; c h a r l i e split : >>> " What s new pussycat? ". split () [ " What s ", new, pussycat? ] find : recherche d une sous-chaîne dans la chaîne : >>> " a n t i c o n s t i t u t i o n n e l l e m e n t ". find ( on ) 5 >>> " a n t i c o n s t i t u t i o n n e l l e m e n t ". find ( bon ) 1 count : nombre d occurrences d une sous-chaîne dans une chaîne : >>> " a n t i c o n s t i t u t i o n n e l l e m e n t ". count ( on ) 2 >>> " a n t i c o n s t i t u t i o n n e l l e m e n t ". count ( bon ) 0 1.3 Algorithme de recherche d une sous-chaîne Fournie par la méthode find. Mais l algorithme est explicitement au programme. Idée simple : On décompose le problème en deux. une fonction cherche(x, s) cherchant x dans s et retournant le plus petit i tel que x soit une sous-chaîne de s commençant à l indice i une fonction est_sous_chaine(x, s, i) testant si x est une sous-chaîne de s commençant à l indice i (autrement dit : x est un préfixe de s[i:]). Réalisation : def cherche (s, x ) : " " " P l u s p e t i t i t e l que x s o i t un pr é f i x e de s [ i : ]. 1 s i x n appara î t pas dans s. " " " for i in len ( s ) : i f est_sous_chaine (x, s, i ) : return i return 1 NB : dans certains langages de programmation, pas de return au milieu d une boucle (seulement à la fin). Dans ce cas, on peut écrire la fonction cherche de la façon suivante : 3

def cherche (s, x ) : " " " P l u s p e t i t i t e l que x s o i t un pr é f i x e de s [ i : ]. 1 s i x n appara î t pas dans s. " " " r = 1 for i in len ( s ) : i f est_sous_chaine (x, s, i ) : r = i break return r Dans certains langages, pas de break. On peut s en passer : def cherche (s, x ) : i = 0 while i < len ( s ) and not ( est_sous_chaine (x, s, i ) ) : i += 1 # i c i ou b i e n i == l e n ( s ) # ou b i e n ( i<l e n ( s ) e t e s t _ s o u s _ c h a i n e ( x, s, i )) i f i < len ( s ) : r = 1 else : r = i return r NB : invariant de la boucle : i <= len(s) et pour tout k<i, s ne contient pas la sous-chaîne x commençant à l indice k. variant : len(s) 1 2 Chaînes : le poids de l histoire 2.1 ASCII 1960s : naissance du standard ASCII pour représenter les caractères. Caractère : codé par un entier dans [[0, 128[[. Peut être codé sur 7 bits, donc sans problème sur un octet. Une chaîne est juste un tableau d octets en mémoire. Adresse mémoire du caractère d indice i : s + i où s est l adresse du début de la chaîne (donc accès en O(1)). Très vite adopté universellement. 2.1.1 Notation hexadécimale des octets Un octet = 2 4 bits. 4 bits : 16 possibilités, représentées par un chiffre hexadécimal (chiffre de 0 à 9 ou lettre de a à f) 4

0 0000 4 0100 8 1000 c 1100 1 0001 5 0101 9 1001 d 1101 2 0010 6 0110 a 1010 e 1110 3 0011 7 0111 b 1011 f 1111 Exemple : 5b représente l octet 01011011. 00 nul 01 soh 02 stx 03 etx 04 eot 05 enq 06 ack 07 bel 08 bs 09 ht 0a nl 0b vt 0c np 0d cr 0e so 0f si 10 dle 11 dc1 12 dc2 13 dc3 14 dc4 15 nak 16 syn 17 etb 18 can 19 em 1a sub 1b esc 1c fs 1d gs 1e rs 1f us 20 sp 21! 22 " 23 # 24 $ 25 % 26 & 27 28 ( 29 ) 2a * 2b + 2c, 2d - 2e. 2f / 30 0 31 1 32 2 33 3 34 4 35 5 36 6 37 7 38 8 39 9 3a : 3b ; 3c < 3d = 3e > 3f? 40 @ 41 A 42 B 43 C 44 D 45 E 46 F 47 G 48 H 49 I 4a J 4b K 4c L 4d M 4e N 4f O 50 P 51 Q 52 R 53 S 54 T 55 U 56 V 57 W 58 X 59 Y 5a Z 5b [ 5c \ 5d ] 5e ^ 5f _ 60 61 a 62 b 63 c 64 d 65 e 66 f 67 g 68 h 69 i 6a j 6b k 6c l 6d m 6e n 6f o 70 p 71 q 72 r 73 s 74 t 75 u 76 v 77 w 78 x 79 y 7a z 7b { 7c 7d } 7e ~ 7f del 2.1.2 A comme... ASCII : American Standard Code for Information Interchange. «American» au sens de «États-Unien» : sans l Amérique latine (español, português) ni le Québec (français) (aucune lettre accentuée) 2.2 Les rustines Octet : 256 valeurs possibles donc 256 caractères codables. ASCII : 128 valeurs 128 places restantes norme ISO 8859-1. Ne suffit pas pour l Europe Centrale ISO 8859-2 (différent). Et pour le turc et le maltais et l esperanto? ISO 8859-3 Et les pays baltes? ISO 8859-4 Au fait, en russe, on utilise pas un alphabet bizarre? ISO 8859-5. Et en arabe? ISO 8859-6 Et en grec? ISO 8859-7 Et l hébreu? ISO 8859-8 Actuellement, on en est à l ISO 8859-16. Quelques quasi-doublons (ISO 8859-15 ISO 8859-1 + e) 5

La plupart n ont en commun que la partie ASCII. Quid des langues orientales? Microsoft : ses propres codages (proches des ISO mais différents) : CP437, CP737, CP850, CP852, CP855, CP857, CP858, CP860, CP861, CP862, CP863, CP865, CP866, CP869, CP872. Windows-1250, Windows-1251, Windows-1252, Windows-1253, Windows-1254, Windows-1255, Windows-1256, Windows- 1257, Windows-1258 Et si on reprenait le problème au début? 2.3 Unicode Fin 1980s/début 1990s : idée de standardiser un codage universel. En 2012, 1, 1 10 5 «caractères» définis, couvrant 100 écritures. Chacun est repéré par un «point de code» (code point), entier de [[0, 1 114 112[[. Ne tient pas sur un octet, ni même sur deux. 2.3.1 UTF-32 Codage de l unicode sur 32 bits. Inconvénient majeur : incompatibilité avec l ASCII. Un texte ASCII n est pas un texte UTF-32 valide. Il y a des quantités énormes de textes écrites en ASCII. UTF-32 n est quasiment pas utilisé pour le stockage sous forme de fichiers. 2.3.2 UTF-8 Codage de taille variable : 1 à 4 octets. Compatible ASCII : un caractère ASCII un octet, codage inchangé. Actuellement le plus utilisé pour les pages web. Format canonique des fichiers textes sur toutes les plateformes (sauf Microsoft). Disponible sur toutes les plateformes, y compris Microsoft. 2.3.3 UTF-8 ou UTF-32? Problèmes de l UTF-8 : Une chaîne de 3 octets peut représenter un texte de 1, 2 ou 3 caractères : le calcul de la longueur nécessite de regarder le contenu, donc n est plus en O(1). Calcul du i e élément : plus en temps constant? Alors qu en UTF-32 : Longueur : nombre d octets divisé par 4 (calcul en O(1)). i e élément à l adresse s + 4i où s adresse du début. 6

2.3.4 UTF-8 et UTF-32 Conclusion : UTF-8 pour le stockage dans les fichiers. UTF-32 pour la représentation en mémoire. À chaque fois qu on lit/écrit un fichier, on convertit. 3 Retour sur les chaînes Python On restera sur Python 2.x. Ce qui suit est valable pour Python 2.x, pas pour Python 3.x. 3.1 Type str Type des chaînes de caractères : str. Historiquement : chaîne de caractères = suite d octets Lecture fichier texte : lignes stockées dans une chaîne de caractères. Lecture fichier binaire : données stockées dans une chaîne de caractères. 3.2 str : chaîne d octets (pas de caractères) On peut mettre n importe quelle suite d octets dans une chaîne. Par exemple, pour mettre les octets 68, c3 et a9 dans une chaîne : s = \x68\ xc3 \xa9 À l affichage, octets ASCII imprimés normalement. Octets non-ascii interprétés selon le codage choisi par python (fonction de la configuration de l OS/de python). Par exemple avec UTF-8 : >>> print ( s ) hé 3.3 Travailler avec des textes Deux possibilités pour travailler avec les chaînes de caractères en Python 2 : Travailler avec les suites d octets (str) et ignorer les problèmes de lettres accentuées. Problèmes (mineurs) à prévoir... Utiliser le type unicode (chaînes unicode). 7

3.3.1 Utilisation d unicode Conversion des chaînes d octets en unicode : t = s. decode ( " utf 8" ) Conversion unicode vers chaîne d octets : x = t. encode ( " utf 8" ) Constante chaîne unicode : u cha î ne 3.3.2 Précautions d usage Les opérations vue section 1 sur str existent également en unicode. Ne pas mélanger unicode et str. Règle à respecter : travailler le plus possible avec unicode et le moins possible avec str. En particulier : Convertir dès que possible les données lues en unicode. Convertir le plus tard possible les données à écrire en suite d octets. 3.4 En Python 3 Les concepteurs de Python 3 ont fait les choses proprement : Chaînes (type str) : vraies chaînes unicode. Nouveau type bytes pour les suite d octets. Lectures dans un fichier : retournent des bytes si ouvert en mode binaire, des str si mode texte (conversion automatique). Écriture : même principe. Malheureusement, à de nombreux égards Python 3 est encore jeune, donc on restera pour l instant sur Python 2. 8