Click here to Skip to main content
15,880,608 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
I have a list of files that when someone launches the program it will get the "normal Files" and when someone does a Full Check, it will get the "Full Check Files".


[normalFiles]
element\userdata\systemsettings.ini
element\userdata\server\serverlist.txt
element\data\elements.data
element\data\gshop.data
element\data\gshop1.data
element\data\gshop2.data
element\elementskill.dll
element\configs.pck
element\monkeydynasty.exe
element\data\aipolicy.data
element\data\domain.data
element\data\domain1.data
element\data\domain2.data
element\data\domain3.data
element\data\domain4.data
element\data\dyn_tasks.data
element\data\dynamicobjects.data
element\data\forbidden_task.txt
element\data\hometowndata
element\data\path.data
element\data\task_npc.data
element\data\tasks.data
element\data\tasks.data1
element\data\tasks.data10
element\data\tasks.data11
element\data\tasks.data12
element\data\tasks.data13
element\data\tasks.data14
element\data\tasks.data15
element\data\tasks.data16
element\data\tasks.data17
element\data\tasks.data18
element\data\tasks.data19
element\data\tasks.data2
element\data\tasks.data20
element\data\tasks.data21
element\data\tasks.data22
element\data\tasks.data23
element\data\tasks.data24
element\data\tasks.data25
element\data\tasks.data26
element\data\tasks.data27
element\data\tasks.data28
element\data\tasks.data29
element\data\tasks.data3
element\data\tasks.data30
element\data\tasks.data31
element\data\tasks.data32
element\data\tasks.data33
element\data\tasks.data34
element\data\tasks.data35
element\data\tasks.data36
element\data\tasks.data37
element\data\tasks.data38
element\data\tasks.data39
element\data\tasks.data4
element\data\tasks.data40
element\data\tasks.data41
element\data\tasks.data42
element\data\tasks.data43
element\data\tasks.data5
element\data\tasks.data6
element\data\tasks.data7
element\data\tasks.data8
element\data\tasks.data9
element\data\title_def.lua
element\data\title_def_u.lua
element\trees.pck
element\data\vipaward.data
element\reportbugs\zreportbugs.exe
element\interfaces.pck
[/normalFiles]
[FullCheckFiles]
element\interfaces.pck
element\Localize.ini
element\arcsdk.dll
element\avcodec-52.dll
element\avformat-52.dll
element\avutil-50.dll
element\bbsfiles\error.html
element\bbsfiles\extensions\extbank\bank3.dll
element\bbsfiles\extensions\extbank\bankbox.ini
element\bbsfiles\extensions\extbank\banklist.dll
element\bbsfiles\extensions\extbank\extbank.ini
element\bbsfiles\extensions\extbank\stat.ini
element\bbsfiles\extensions\extbank\stat_bankbox.ini
element\bbsfiles\extensions\extbank\up_temp.ini
element\berkelium.dll
element\berkelium.exe
element\building.pck
element\chrome.log
element\chrome_plugins_file.xml
element\coreclientsdk.dll
element\cursors\attack.ani
element\cursors\attack.cur
element\cursors\axe.ani
element\cursors\choose.ani
element\cursors\choose1.ani
element\cursors\choose2.ani
element\cursors\dig.ani
element\cursors\drag.ani
element\cursors\drag.cur
element\cursors\drag1.ani
element\cursors\fire.ani
element\cursors\flag.cur
element\cursors\gear.ani
element\cursors\geer.ani
element\cursors\hammer.ani
element\cursors\hand.cur
element\cursors\hand1.ani
element\cursors\hand2.ani
element\cursors\harvest1.ani
element\cursors\harvest2.ani
element\cursors\hook.ani
element\cursors\key.ani
element\cursors\knife.ani
element\cursors\normal.ani
element\cursors\pest1.ani
element\cursors\pest2.ani
element\cursors\pick.ani
element\cursors\pick.cur
element\cursors\plot.ani
element\cursors\plot1.ani
element\cursors\plot2.ani
element\cursors\point.ani
element\cursors\repair.cur
element\cursors\seed.ani
element\cursors\seed1.ani
element\cursors\seed2.ani
element\cursors\split.ani
element\cursors\steal1.ani
element\cursors\steal2.ani
element\cursors\talk.cur
element\cursors\unablepoint.ani
element\cursors\water1.ani
element\cursors\water2.ani
element\cursors\weed1.ani
element\cursors\weed2.ani
element\cursors\zoomin.cur
element\cursors\zoomout.cur
element\d3dx9_24.dll
element\dbghelp.dll
element\dbserver.conf
element\facedata.pck
element\font\fzl2jw.ttf
element\font\fzl2jw.ttf1
element\font\fzlbjw.ttf
element\font\fzlbjw.ttf1
element\font\fzxh1jw.ttf
element\ftdriver.dll
element\gfx.pck
element\grasses.pck
[/FullCheckFiles]



I have tried the following expression

(?=[normalFiles])(.*?element(?:(?!\|).)*)(?![/normalFiles])

to get the file names only between [normalFiles] and [/normalFiles] But it gets the ones between [FullCheckFiles] and [/FullCheckFiles] as well.
Posted
Updated 21-Jan-14 15:34pm
v2
Comments
Ron Beyer 21-Jan-14 21:46pm    
Are you hell bent on using a regex for this? I'm part of the club that believes any person who thinks they have a problem that can be solved with a RegEx typically ends up with two problems...
Hulu8004 21-Jan-14 21:47pm    
This is for a C# program, it gets the file names and downloads them.
Ron Beyer 21-Jan-14 22:05pm    
I understand, but I could recommend a way to do this without regex's, using regex makes it much more complicated...
Hulu8004 21-Jan-14 22:07pm    
care to share?
Ron Beyer 21-Jan-14 22:18pm    
I gave the solution below.

1 solution

Here is a way to do it without RegEx:

C#
    class Program
    {
        static void Main(string[] args)
        {

            string fileName = "CheckFileList.txt";
            Dictionary<string,List<string>> sections = GenerateList(fileName);

            foreach (string sectionName in sections.Keys)
            {
                foreach (string file in sections[sectionName])
                    Console.WriteLine(string.Format("Section {0} : File {1}", sectionName, file));
            }

            Console.ReadKey();
        }

        public static Dictionary<string,List<string>> GenerateList(string fileName)
        {
            string[] fileLines = File.ReadAllLines(fileName);

            string currentSection = string.Empty;
            Dictionary<string,List<string>> retVal = new Dictionary<string,List<string>>();

            for (int i = 0; i < fileLines.Length; i++)
            {
                if (fileLines[i].StartsWith("["))
                {
                    if (string.IsNullOrEmpty(currentSection))
                    {
                        currentSection = fileLines[i].TrimStart('[').TrimEnd(']');
                        retVal[currentSection] = new List<string>();
                    }
                    else
                    {
                        if (fileLines[i].StartsWith("[/"))
                            currentSection = string.Empty;
                        else
                            throw new Exception("Invalid section identifier " + fileLines[i] + " line " + i);
                    }
                    continue;
                }

                if (!string.IsNullOrEmpty(currentSection))
                    retVal[currentSection].Add(fileLines[i]);
            }

            return retVal;
        }
    }
</string>


The dictionary contains the sections in the file as keys, and then a list of files in that section. This is also expandable to more sections or different names.

And I think its much more maintainable than a RegEx.
 
Share this answer
 
v3
Comments
BillWoodruff 22-Jan-14 12:38pm    
+5 Nice work !
Ron Beyer 22-Jan-14 12:46pm    
Thanks Bill.
Matt T Heffron 22-Jan-14 13:45pm    
+5People don't think about using Dictionary<TKey,TValue> in many cases where they would be a very good solution!
Ron Beyer 22-Jan-14 13:52pm    
Thanks Matt... Dictionaries are great for things like this, what I think people forget is that TValue can be a generic itself, so you can store dictionaries of lists (like this instance) or dictionaries of dictionaries, etc.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900