Page 1 sur 1

[FUNC] FileSaveDialogToString

Posté : ven. 27 mai 2016 04:51
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

Re: [FUNC]FileSaveDialogToString

Posté : ven. 27 mai 2016 08:04
par jchd
T'es sûr, là ??????

Re: [FUNC] FileSaveDialogToString

Posté : sam. 28 mai 2016 11:22
par Numeric
Absolument jchd ....As tu une remarque à faire?

Re: [FUNC] FileSaveDialogToString

Posté : sam. 28 mai 2016 20:12
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.

Re: [FUNC] FileSaveDialogToString

Posté : dim. 29 mai 2016 02:02
par Numeric
bien vu, je l'améliorerai...merci pour ta remarque, elle est constructive...

Re: [FUNC] FileSaveDialogToString

Posté : dim. 29 mai 2016 11:31
par jchd
C'est là le but.

Re: [FUNC] FileSaveDialogToString

Posté : dim. 29 mai 2016 15:59
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...

Re: [FUNC] FileSaveDialogToString

Posté : mer. 19 oct. 2016 04:27
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:

Re: [FUNC] FileSaveDialogToString

Posté : jeu. 20 oct. 2016 01:56
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

Re: [FUNC] FileSaveDialogToString

Posté : jeu. 27 oct. 2016 17:39
par mikell
; Description ...: Recupere le nom ou l'extension d'un fichier dont le path est retourné par fileopendialog
; .....
; Return values .: None
...... :!:

Re: [FUNC] FileSaveDialogToString

Posté : dim. 30 oct. 2016 02:04
par Numeric
Bien vu mikell, petite erreur de ma part....