[FUNC] FileSaveDialogToString

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 125
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

[FUNC] FileSaveDialogToString

#1

Message par Numeric »

Salut, :D

imaginons que vous voulez créer un programme dans lequel l'utilisateur pourras inclure des données pour les réutiliser plus tard si besoin grâce à leurs noms : par exemple un Pack de thème .
1) vous devez créer un espace de stockage de ces données (pas de problème :D )
2) il vous faudra récupérer les noms de ces données pour les proposer plus tard quand l'utilisateur en aura besoin : peut-être dans une ComboBox...: petit problème :twisted:
Voici une fonction avec deux exemples pour résoudre ce problème... :P
Fichiers joints
StringMaster3.au3
(1.68 Kio) Téléchargé 2128 fois
Exemple StringMaster.au3
(2.48 Kio) Téléchargé 2142 fois
Modifié en dernier par Numeric le mar. 31 mai 2016 08:57, modifié 2 fois.
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [FUNC]FileSaveDialogToString

#2

Message par jchd »

T'es sûr, là ??????
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 125
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: [FUNC] FileSaveDialogToString

#3

Message par Numeric »

Absolument jchd ....As tu une remarque à faire?
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [FUNC] FileSaveDialogToString

#4

Message par jchd »

Quelques-unes, préfixées par ;@

Code : Tout sélectionner

#include <Array.au3>
#include <String.au3>
#include-once
; #INDEX# =======================================================================================================================
; Title .........: StringName.au3
; AutoIt Version : 3.3.14.2
; Language ......: French
; Description ...: Functions qui trie et index des string specifique dans n'importe quelle handle"
;                  The clipboard is a set of functions and messages that enable applications to transfer data.
;                  Because  all applications have access to the clipboard, data can be easily transferred
;                  between applications  or  within  an application.
; Author(s) .....: Numeric
; ===============================================================================================================================

;@ la description ne correspond pas du tout à ce que la fonction prétend réaliser
;@ un handle ce n'est pas ça du tout
;@ clipboard ???

; #CONSTANTS# ===================================================================================================================

#Region Functions list
; #CURRENT# =====================================================================================================================
;  FileSaveDialogToString
; ===============================================================================================================================
#EndRegion Functions list

;#REGION EXEMPLE=================================================================================================================
;@ l'option 3 n'est pas une combinaison valide
Local $Exemple = FileSaveDialog("Mon Fichier", @DesktopDir, "Fichiers Mp3(*.mp3)", 3)

;Fonction pour récuperer le nom du fichier
$Show_name = FileSaveDialogToString($Exemple, 'mp3')

;Exemple 2
;Local $Exemple = FileSaveDialog("Mon Fichier",@DesktopDir,"Tous(*.*)",3)
;$Show_name = FileSaveDialogToString($Exemple,Default)

;Verification du nom
MsgBox(64, 'Le nom du fichier', 'Le nom du fichier sélectionné est : ' & $Show_name)
;#END REGION====================================================================================================================

; #FUNCTION# ====================================================================================================================
; Name ..........: FileSaveDialogToString
; Description ...: Recuperer le nom au lieu des paths des fichiers selection par fileSaveDialog
; Syntax ........: FileSaveDialogToString($FileHandle[, $extension = Default])
; Parameters ....: $FileHandle          - an unknown value.
;                  $extension           - [optional] an unknown value. Default is Default.
; Return values .: $FileName&$Separator&$extension    as String
; Author ........: Numeric
; Example .......: Show_name = FileSaveDialogToString( FileSaveDialog("Mon Fichier",@DesktopDir,"Fichiers Mp3(*.mp3)",3),'mp3')
; ===============================================================================================================================
Func FileSaveDialogToString($FileHandle, $extension = Default)
	Local $FileName, $KeyWord, $TrimWord, $word, $Separator
	If $extension = Default Then $extension = ""

;@ un simple
;@	If $extension <> "" Then $Separator = '.'
;@ suffirait
	If $extension = "" Then
		$Separator = ""
	ElseIf $extension <> "" Then
		$Separator = '.'
	EndIf

;@ cette ligne ne fait pas ce que tu crois qu'elle fait :
;@ elle équivaut à
;@	$KeyWord = True
	$KeyWord = "*" Or $KeyWord = "=" Or $KeyWord = ":" Or $KeyWord = ";"
	If $FileHandle = '' Then Return SetError(1, 0, '')
	$StringSplit = StringSplit($FileHandle, "\", 1)
	If @error = 1 Then
		$FileName = $FileHandle

;@ cette ligne est commune aux deux branches, donc la placer après le EndIf
		Return $FileName & $Separator & $extension
	Else
		For $i = 1 To $StringSplit[0]

;@ ici il y a un gros problème !
;@ puisque $Keyword vaut toujours True, cette ligne équivaut à :
;@			$TrimWord = StringInStr($StringSplit[$i], "True")
;@ et en effet, le problème se manifeste si le nom de fichier choisi contient la sous-chaîne "true"
			$TrimWord = StringInStr($StringSplit[$i], $KeyWord)
			If $TrimWord = 0 Or $TrimWord = 1 Then

;@ autre problème : si le nom choisi contient un point, il y a bug
				$word = _StringBetween($StringSplit[$i], '', '.')
			Else
				Return SetError(2, 0, 0)
			EndIf
		Next
		$FileName = _ArrayToString($word)
;@ cette ligne est commune aux deux branches, donc la placer après le EndIf
		Return $FileName & $Separator & $extension
	EndIf ;Fin de la condition = s'il n'ya pas d'erreur
EndFunc   ;==>FileSaveDialogToString
Puis je ne vois pas bien le rapport entre l'exposé initial et le code. Je verrais plutôt un .INI ou une BdD si le volume le justifie, mais là je nage.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 125
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: [FUNC] FileSaveDialogToString

#5

Message par Numeric »

bien vu, je l'améliorerai...merci pour ta remarque, elle est constructive...
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [FUNC] FileSaveDialogToString

#6

Message par jchd »

C'est là le but.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 125
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: [FUNC] FileSaveDialogToString

#7

Message par Numeric »

Salut,

Apres les remarques j'ai voulu faire mieux. Cependant le but est de toujours s'améliorer...

1) vous remarquerai la remarque Remarks les limites de la fonction ou plutôt le cadre d'application...
Fichiers joints
StringMaster3.au3
(1.68 Kio) Téléchargé 2133 fois
Modifié en dernier par Numeric le mar. 31 mai 2016 08:39, modifié 2 fois.
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [FUNC] FileSaveDialogToString

#8

Message par orax »

J'aurais juste une petite remarque à faire à propos de l'utilisation du mot handle. Comme l'avait dit jchd dans son code commenté, ce qui est retourné par FileSaveDialog() n'est pas un handle (on pourrait traduire handle par descripteur), c'est le chemin complet du fichier. C'est donc une chaîne de caractères et non un handle.
Donc au lieu d'avoir $FileHandle dans Func FileSaveDialogToString($FileHandle, $extension = Default), il serait peut-être plus correct de changer le nom de la variable en quelque chose comme... $FileFullPath, $Path, $FilePath, ...

Et aussi... dans les parties "Exemples de scripts" et "Fonction et UDF", quand tu mets à jour le code, il serait préférable d'éditer le premier message, car c'est surtout le code du premier message qu'on va récupérer. :wink:
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 125
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: [FUNC] FileSaveDialogToString

#9

Message par Numeric »

Coucou :D
la réflexion continue...
voici une fonction plus simplifiée et plus puissante....
#include <Array.au3>


; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __StringName
; Description ...: Recupere le nom ou l'extension d'un fichier dont le path est retourné par fileopendialog
; Syntax ........: __StringName($sFilePath[, $getExtension = False])
; Parameters ....: $sFilePath           - a string value.
;                  $getExtension        - [optional] an unknown value. Default is False.
; Return values .: None
; Author ........: Numeric
; Remarks .......:
; Related .......:
; ===============================================================================================================================
Func __StringName($sFilePath, $getExtension = False)
   Local $getSections, $getExt = '', $sFileName = $sFilePath
   If $sFilePath = '' Then Return SetError(1, @extended, -1)
   If $getExt = Default Or $getExt <> True Then $getExt = False
   Local Const $sDel = '\'
   Local Const $sEdel = '.'

   Switch $getExtension
      Case True
         $getSections = StringSplit($sFilePath, $sDel, 1)
         If IsArray($getSections) Then
            $sFileName = _ArrayPop($getSections)
            If StringInStr($sFileName, $sEdel) <> 0 Then
               $extEnd = StringSplit($sFileName, $sEdel)
               $getExt = _ArrayPop($extEnd)
            EndIf
         EndIf
         $sFileName = $getExt
      Case False
         Local $isBuff = StringLen($sFilePath)
         Local $isDll = DllStructCreate('wchar[' & $isBuff + 1 & ']')
         Local $isCALL = DllCall('Comdlg32.dll', 'short', 'GetFileTitle', 'str', $sFilePath, 'str', $isDll, 'word', $isBuff)
         $sFileName = $isCALL[2]
   EndSwitch

   Return $sFileName
EndFunc   ;==>__StringName
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [FUNC] FileSaveDialogToString

#10

Message par mikell »

; Description ...: Recupere le nom ou l'extension d'un fichier dont le path est retourné par fileopendialog
; .....
; Return values .: None
...... :!:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 125
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: [FUNC] FileSaveDialogToString

#11

Message par Numeric »

Bien vu mikell, petite erreur de ma part....
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Répondre