Page 1 sur 1

Importation des Donnees d'un Fichier vers le PressePapier

Publié : mer. 18/mars/2020 9:41
par kernadec
bjr à tous
Comme il y a pas beaucoup d'exemple pour ce cas :wink:
et que les exemples MDSN en "C" utilisent un tampon via une adresse mémoire
voici un petit code pour copier le contenu d'un fichier vers le Presse papier.
je n'ai pas testé si ce code est plateforme.
Donc, si quelqu'un pouvait confirmer qu'il fonctionne également sur Linux et Mac
Merci

Cordialement

Code : Tout sélectionner

;#################################################################################
;##   Importation des données d'un fichier vers Pressepapier - kernadec 2020-03  ## 
;#################################################################################
Chemin$ = "C:\PureBasic\"
Modele$ = "PureBasic (*.pb; *.pbi)|*.pb;*.pbi|Tous (*.*)|*.*" 
fichier$ = OpenFileRequester("Importation vers Presse Papier",chemin$,Modele$,0)
ClearClipboard()
If ReadFile(0, fichier$)
  While Eof(0) = 0  
    texte$ = ReadString(0)
    SetClipboardText(GetClipboardText() + Left(texte$, Len(texte$)-1) + Chr(13) + Chr(10))
  Wend
  CloseFile(0)
Else
  MessageRequester("Information "," Fichier Inconnu? ")
EndIf

Re: Importation des Donnees d'un Fichier vers le PressePapie

Publié : mer. 18/mars/2020 10:05
par Marc56
Intéressant, à conserver. :wink:

Je propose une amélioration en lisant tout le texte en une seule passe (avec #PB_File_IgnoreEOL) et en détectant en même temps le format (ReadStringFormat(0)) et en supprimant une variable temporaire

Code : Tout sélectionner

  While Not Eof(0)
    SetClipboardText(ReadString(0, ReadStringFormat(0) | #PB_File_IgnoreEOL))
  Wend
(juste pour le 'punch' :P 8) )

Re: Importation des Donnees d'un Fichier vers le PressePapie

Publié : mer. 18/mars/2020 10:20
par kernadec
bjr Marc56
Merci, pour l' astuce...
bon, eh ben je vais utiliser l'adage abondance de biens ne nuit pas


j'ajouterais même que c'est ce genre d'astuce qui mériterait d' être
dans le manuel pour la fonction Clipboard

Cordialement

Re: Importation des Donnees d'un Fichier vers le PressePapie

Publié : mer. 18/mars/2020 22:23
par G-Rom
Pour ma part, j'aurais fait ainsi pour un gain significatif sur des gros fichiers :
(en remplacement de while/wend )

Code : Tout sélectionner

*buffer = AllocateMemory(Lof(0))
  ReadData(0,*buffer,Lof(0))
  SetClipboardText(PeekS(*buffer,Lof(0),#PB_UTF8 | #PB_ByteLength))
  FreeMemory(*buffer)

Re: Importation des Donnees d'un Fichier vers le PressePapie

Publié : jeu. 19/mars/2020 13:51
par kernadec
bjr G-Rom
eh ben merci, voilà qui fait une option de plus!

j’espère simplement que la commande Clipboard du manuel PB pourra en profiter
car certaines commandes mériteraient d'avoir quelques exemples et astuces

Cordialement

Re: Importation des Donnees d'un Fichier vers le PressePapie

Publié : sam. 28/mars/2020 18:13
par kernadec
bjr à tous
Avec mon code qui utilise une variable temporaire eh bien ca lui donne un petit plus :wink:
il permet d' importer une liste de fichiers à la suite dans le presse papier.

Cordialement

Code : Tout sélectionner


;#########################################################################################################
;##   Importation des données de plusieurs fichiers a la suite vers Presse-papier - kernadec 2020-03  ##
;#########################################################################################################
NewList file.s()

For i=1 To 10
  If CreateFile(0, "Text"+Chr(64+i)+".txt")         ; crée un nouveau fichier texte ou recrée une fichier texte vide s'il existe déjà ...
    
    AddElement(file())
    file()="Text"+Chr(64+i)+".txt"
    
    For a=1 To 10
      WriteString(0, "Chaîne"+Str(a))  ; ajoute 10 chaînes sur la même ligne (le code 'Fin de Ligne' n'est pas ajouté)
    Next
    CloseFile(0)                       ; ferme le fichier précédemment ouvert et enregistre les données
  Else
    MessageRequester("Information","Impossible de créer le fichier!")
  EndIf
Next i


Chemin$ = "C:\PureBasic\"
Modele$ = "PureBasic (*.pb; *.pbi)|*.pb;*.pbi|Tous (*.*)|*.*"
;fichier$ = OpenFileRequester("Importation vers Presse Papier",chemin$,Modele$,0)

ClearClipboard()

ResetList(file())

For i = 1 To 10
  
  NextElement(file())
  fichier$=file()
  
  If ReadFile(0, fichier$)
    
    While Eof(0) = 0 
      texte$ = ReadString(0)
     ; SetClipboardText(GetClipboardText() + Left(texte$, Len(texte$)) + Chr(13) + Chr(10))
       SetClipboardText(GetClipboardText() + texte$ + Chr(13) + Chr(10))
 Wend
    
    ; While Not Eof(0)
    ;     SetClipboardText(ReadString(0, ReadStringFormat(0) | #PB_File_IgnoreEOL))
    ; Wend
    
    CloseFile(0)
  Else
    MessageRequester("Information "," Fichier Inconnu? ")
  EndIf
Next i


Re: Importation des Donnees d'un Fichier vers le PressePapie

Publié : mar. 14/avr./2020 14:06
par alfred47
kernadec a écrit :bjr à tous
Avec mon code qui utilise une variable temporaire eh bien ca lui donne un petit plus :wink:
il permet d' importer une liste de fichiers à la suite dans le presse papier.

Cordialement

Code : Tout sélectionner


;#########################################################################################################
;##   Importation des données de plusieurs fichiers a la suite vers Presse-papier - kernadec 2020-03  ##
;#########################################################################################################
NewList file.s()

For i=1 To 10
  If CreateFile(0, "Text"+Chr(64+i)+".txt")         ; crée un nouveau fichier texte ou recrée une fichier texte vide s'il existe déjà ...
    
    AddElement(file())
    file()="Text"+Chr(64+i)+".txt"
    
    For a=1 To 10
      WriteString(0, "Chaîne"+Str(a))  ; ajoute 10 chaînes sur la même ligne (le code 'Fin de Ligne' n'est pas ajouté)
    Next
    CloseFile(0)                       ; ferme le fichier précédemment ouvert et enregistre les données
  Else
    MessageRequester("Information","Impossible de créer le fichier!")
  EndIf
Next i


Chemin$ = "C:\PureBasic\"
Modele$ = "PureBasic (*.pb; *.pbi)|*.pb;*.pbi|Tous (*.*)|*.*"
;fichier$ = OpenFileRequester("Importation vers Presse Papier",chemin$,Modele$,0)

ClearClipboard()

ResetList(file())

For i = 1 To 10
  
  NextElement(file())
  fichier$=file()
  
  If ReadFile(0, fichier$)
    
    While Eof(0) = 0 
      texte$ = ReadString(0)
     ; SetClipboardText(GetClipboardText() + Left(texte$, Len(texte$)) + Chr(13) + Chr(10))
       SetClipboardText(GetClipboardText() + texte$ + Chr(13) + Chr(10))
 Wend
    
    ; While Not Eof(0)
    ;     SetClipboardText(ReadString(0, ReadStringFormat(0) | #PB_File_IgnoreEOL))
    ; Wend
    
    CloseFile(0)
  Else
    MessageRequester("Information "," Fichier Inconnu? ")
  EndIf
Next i


Fonctionne comme un charme
merci pour la mise à jour