Jump to content

Recommended Posts

Posted (edited)

I want to get the file name that says _stripped.au3 at the end of the file
I can't get the file name.

testV5.1_autoit_stripped.au3
testau3_test.au3
dadasdasd.au3
autoit_autoit.au3
test_stripped.txt

#include <File.au3>

$path = @ScriptDir
$filter = "*.au3"

$search = _FileListToArray($path, $filter)
If IsArray($search) Then
    For $i = 1 To $search[0]
        $RegExp = StringRegExp($search[$i], '(?i)([^_]+)_stripped.au3', 3)
        If IsArray($RegExp) Then
            ConsoleWrite($RegExp[0] & @CRLF)
        EndIf
    Next
EndIf

 

Edited by youtuber
Posted (edited)

can you just put it in the filter?

#include <File.au3>
#include<Array.au3>

$path = @ScriptDir
$filter = "*_stripped.au3"

$search = _FileListToArray($path, $filter)

_ArrayDisplay($search)

 

Edited by iamtheky

  Reveal hidden contents

Posted
$path = @ScriptDir
$filter = "*_stripped.au3"

$search = _FileListToArrayRec($path, $filter)

now it uses regex :)

  Reveal hidden contents

Posted

@youtuber

I used  .+  because I assumed that you have no file with the name "_stripped.au3" , but you can use  .*  as well  :)
If you remove parenthesis then you don't remove "_stripped.au3" from the filename

 

  On 6/11/2019 at 3:14 AM, iamtheky said:

now it uses regex

Expand  

Yes but it again doesn't allow to remove the filter from the filename. Let's say that using this option or not is left to the OPs choice :idiot:

Posted

@iamtheky @mikell

If the file name was this, stripped_v3.au3,stripped_v4.au3,stripped_v5.au3,stripped_v5.1.au3,stripped_v5.2.au3 do you think the following filtering is correct?

$filter = "stripped_v*.au3"
$search = _FileListToArrayRec($path, $filter)

or

$filter = "stripped_v?.au3"
$search = _FileListToArrayRec($path, $filter)

otherwise, would it be more accurate to use regex?

$RegExp = StringRegExp($search[$i], 'stripped_v(\d(.*?){1,2}).au3', 3)

 

Posted (edited)

they are all regex, and either can be built to accomodate large buckets of edge cases.  I dont know that there is anywhere to find a preference that isnt pedantic af. 

Edited by iamtheky

  Reveal hidden contents

Posted (edited)

Here is a consistent pattern ^_^

Global $Fileversion[6] = ["asdasfasfasd", _
        "stripped_v0.au3", _
        "stripped_v3.au3", _
        "stripped_v4.au3", _
        "stripped_v5.au3", _
        "stripped_v5.1.0.0.au3"]

For $i = 0 To 5
    $RegExp = StringRegExp($Fileversion[$i], 'stripped_v[\d\.]{0,9}.au3', 3)
    If IsArray($RegExp) Then
        ConsoleWrite($RegExp[0] & @CRLF)
    EndIf
Next

 

Edited by youtuber
Posted
  On 6/15/2019 at 1:22 PM, youtuber said:

Here is a consistent pattern

Expand  

Consistent ? yes. Efficient ? no. Just test it on this

Global $Fileversion[6] = ["asdasfasfasd", _
        "stripped_v5.au3", _
        "stripped_v......au3", _
        "stripped_v.....5.au3", _
        "stripped_v15.12.10.10.au3", _
        "stripped_v5....au3"]

Here is the clean way

$RegExp = StringRegExp($Fileversion[$i], 'stripped_v\d+(?:\.\d+)*\.au3', 3)

 

Posted
  On 6/15/2019 at 2:23 PM, Nine said:

That wouldn't work with "stripped_v5.au3.txt".

Expand  

Right. It should be :   'stripped_v\d+(?:\.\d+)*\.au3$'   ( trailing $ added)
You perfectly showed that regex is not as simple as it seems  :)

 

  On 6/15/2019 at 2:23 PM, Nine said:

this simple "^stripped_v.+\.au3$" is working, no ?

Expand  

this one matches  "stripped_vademecum#;;lol-.au3"  ....

Posted
  On 6/15/2019 at 2:54 PM, mikell said:

Yes. It was not explicit in the OPs requirements but I assumed that what was to be matched was a version number with a correct syntax 

Expand  

Alright, make sense. But then you still need to add ^ at the beginning otherwise you would get false positive with "#123;456:.stripped_v5.au3"

Posted (edited)

I'm sorry to plug my program here but I must, for there is something this hobbyist may have gleamed from its vast reserves if he had known in advance, and therefore not ask this question. Which wastes all our time! That's important!

 

If you look at what I did there, $aRegExSFile, it perfectly matches this situation. 

(((.*)(?=\\)\N)|(\\))(.*?)\z

The only difference is change \z to $, add stripped_v and .au3, and put the .*? in between them.

(((.*)(?=\\)\N)|(\\))(stripped_v)(.*?)(.au3)$

https://www.debuggex.com/r/AwbaT9ONYtDiqO7W

Edited by moosjuice

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...