PureBasic

Forums PureBasic
Nous sommes le Jeu 22/Aoû/2019 6:28

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 
Auteur Message
 Sujet du message: Fonction StrinField()
MessagePosté: Jeu 08/Nov/2018 10:51 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 25/Avr/2008 11:14
Messages: 1336
Bonjour à tous
je vais bien! :D j’espère que vous aussi....
La commande pour récupérer les champs dans une chaine avec des délimiteurs
comme StringField(Chaine$, Index, Delimiteur$) de Purebasic n'est pas souvent prévue
dans les autres langages, elle est pourtant très pratique pour lire les fichiers.csv

voici un ptit code pour contourner cette commande ailleurs :wink:

Cordialement
kernadec


Code:
;Fonction StringField(Chaine$, Index, Délimiteur$)

Global chaine$, nb.l, c.l, i.l

chaine$ = "10000;111.1234;222.5678;06;11;2000;a1;2;b3;4;5cd;6;7;8;9E"   ;chaine d un fichier,csv avec separateur ";"

If Right(chaine$, 1) <> ";"   
  chaine$ = chaine$+ ";"  ;test si le dernier separateur de champs est present ";" car il est obligatoire
EndIf

Debug chaine$

nb = 0
For i = 1 To Len(chaine$) + 1
If Right(Mid(chaine$, 1, i), 1) = ";"   ;recherche le nombre de separateur ";" dans la chaine
   nb = nb + 1 
  EndIf
Next i

If nb <> 0
 
Dim champ$(nb)
champ$(1) = chaine$
For i = 1 To nb                          ; boucle d'extraction des champs
  c = 0
 
  Repeat
    c = c + 1
  Until Right(Mid(champ$(i), 1, c), 1) = ";"
  champ$(1 + i)=Right(champ$(i),Len(champ$(i))-c)
 
  Debug Left(champ$(i), c - 1)               ; affichage de chaque champs
Next i

EndIf



Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Fonction StrinField()
MessagePosté: Jeu 08/Nov/2018 11:27 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1592
Merci pour l'idée :)

+ le découpage de chaine existe dans presque tous les langages de haut niveau, mais s'appelle différement. Ex: Split (Perl) ou Explode (PHP > 7 mais Split avant) etc

+ Dans le cadre des fonctions sympa de PB, il y a le comptage automatique de chaines: CountString()
Donc on peut simplifier:
Code:
    ; If Right(Mid(chaine$, 1, i), 1) = ";"   ;recherche le nombre de separateur ";" dans la chaine
    ;    nb = nb + 1
    ;   EndIf

    nb = CountString(chaine$, ";") + 1

:wink:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Fonction StrinField()
MessagePosté: Jeu 08/Nov/2018 13:28 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 895
Salut a tous
un jour j'ai eu besoin d'une fonction comme celle_ci
Code:
;MLD le 9/11/2012
; change un texte entre deux limiteurs
;PB5 et +
Procedure.s ChangeStringField(chaine$,Index,Delimiteur$,texte$)
nbd.w = 0 : lenG = 0 : lenD = 0
If chaine$ <> ""
For i.w = 1 To Len(chaine$)
  If Mid(chaine$,i,1) = Delimiteur$
   nbd = nbd + 1
   If nbd = index -1
    lenG = i
   EndIf
   If nbd = Index
    lenDd = i
   EndIf
   lenD = i - lenDd 
  EndIf
Next
If nbd => Index ;vérif qu'il y a bien le nombre de délimiteur nécéssaire pour l'appel de la fonction
  ProcedureReturn Left(chaine$,lenG) + texte$ + Right(chaine$,lenD+1)
EndIf
EndIf   
EndProcedure

chaine$ = "Super *belle *cette *fille*"
Debug chaine$
a$ = StringField(chaine$,1,"*") + StringField(chaine$,2,"*")+StringField(chaine$,3,"*")+StringField(chaine$,4,"*")
Debug a$
chaine$ = ChangeStringField(chaine$,2,"*","moche ")
Debug chaine$
b$ = StringField(chaine$,1,"*") + StringField(chaine$,2,"*")+StringField(chaine$,3,"*")+StringField(chaine$,4,"*")
Debug b$


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Fonction StrinField()
MessagePosté: Jeu 08/Nov/2018 17:08 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 25/Avr/2008 11:14
Messages: 1336
bjr
@Marc56 merci pour les infos sur Perl et Php :wink:
MLD merci pour le code je le range dans ma bibli..

cordialement


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye