Wyrażenie regularne - numerowanie.

dział ogólny

Wyrażenie regularne - numerowanie.

Nowy postprzez Norbit » niedziela, 26 lutego 2017, 20:15

Próbuję stworzyć wyrażenie regularne, które ponumeruje mi pliki. Z numerowaniem 1, 2, 3 it... nie mam problemu - wyrażenie jest proste. Ale ja potrzebuję wyrażenia, które ponumeruje mi pliki według schematu: 1a, 1b, 2a, 2b, 3a, 3b, itd... Nic mi nie wychodzi. Jakiś pomysł?
Avatar użytkownika
Norbit
Bladawiec
Bladawiec
 
Posty: 33
Dołączył(a): wtorek, 15 lipca 2008, 22:43
Podziękował : 1
Otrzymał podziękowań: 1
    Windows 7Firefox

Re: Wyrażenie regularne - numerowanie.

Nowy postprzez Mironas » poniedziałek, 27 lutego 2017, 09:09

Dwie pętle.
1 - Zewnętrzna numeruje (int i) od 1 do np 100.
2 - Wewnętrzna numeruje (char c) od a do np. z.
Wewnątrz tych pętli łączysz: IntToStr(i) z 'c'
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Wyrażenie regularne - numerowanie.

Nowy postprzez polymorphism » poniedziałek, 27 lutego 2017, 10:52

Wyrażenie regularne do ponumerowania plików?! Coś Ci się chyba pomyliło. Zrób tak, jak napisał Mironas... choć jeśli ma być tylko a i b, to wystarczy jedna pętla.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Wyrażenie regularne - numerowanie.

Nowy postprzez Norbit » wtorek, 28 lutego 2017, 02:20

Na to jak napisał Mironas to ja od razu wpadłem. Potrzebne jest mi to do programu, który masowo zmienia nazwy plików według zdanego schematu. A w schemacie wprowadzane są wyrażenia regularne. Mam już opracowanych kilka wyrażeń, ale z tym jednym sobie nie radzę. Nie jest to żadna nowość i nic mi się nie pomyliło. Coś takiego widziałem np. w programie Total Commander. Potrzebuję stworzyć coś podobnego. I nic mi się nie pomyliło.
Avatar użytkownika
Norbit
Bladawiec
Bladawiec
 
Posty: 33
Dołączył(a): wtorek, 15 lipca 2008, 22:43
Podziękował : 1
Otrzymał podziękowań: 1
    Windows 7Firefox

Re: Wyrażenie regularne - numerowanie.

Nowy postprzez polymorphism » wtorek, 28 lutego 2017, 11:20

Pisałeś o numerowaniu plików, a to nie ma nic wspólnego z wyrażeniami regularnymi, ponieważ te służą do wyszukiwania pewnego wzorca w tekście. W TC, z tego co pamiętam, regexpy służyły do wyszukania w nazwie pliku fragmentu, który można było wymienić na inny, zdefiniowany (format-stringiem) przez użytkownika.

Więc może doprecyzuj, o co Ci konkretnie chodzi. Czy o użycie regexpów do wyszukiwania, czy może o implementację format-stringa.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Wyrażenie regularne - numerowanie.

Nowy postprzez Norbit » środa, 1 marca 2017, 01:54

Chodzi mi właśnie o coś takiego jak TC, ale nie potrafię sklecić takiego wzorca, więc nie mogę nic dalej oprogramować tego. Może wyraziłem się zbyt skrótowo. W ostatecznym rozrachunku program ma zmieniać nazwy plików według wzorca podanego w regexach.
Avatar użytkownika
Norbit
Bladawiec
Bladawiec
 
Posty: 33
Dołączył(a): wtorek, 15 lipca 2008, 22:43
Podziękował : 1
Otrzymał podziękowań: 1
    Windows 7Firefox

Re: Wyrażenie regularne - numerowanie.

Nowy postprzez polymorphism » środa, 1 marca 2017, 14:09

W sumie nic nie doprecyzowałeś, ale... widzę to tak:
KOD cpp:     UKRYJ  
std::string find_text = "[sd]"; // to, czego szukamy w nazwie pliku.
std::string replace_text = "_"; // to, czym zastępujemy.
std::string file_name;
std::string result;

/* przykładowa lista plików */
std::list<std::string> paths = { "d:\\aaa\\asdsfg.txt", "d:\\aaa\\sddgg.txt", "d:\\aaa\\asfg.txt" };
       
std::regex re(find_text);
       
for(auto &file_path : paths)
{      
        size_t p1 = file_path.find_last_of('\\');
        size_t p2 = file_path.find_last_of('.');
               
        if(p1 == std::string::npos) p1 = 0; else ++p1;
        if(p2 == std::string::npos || p2 < p1) p2 = file_path.size();

        file_name.assign(file_path, p1, p2 - p1);
               
        result.erase(result.begin(), result.end());
               
        std::regex_replace(std::back_insert_iterator<std::string>(result), file_name.begin(), file_name.end(), re, replace_text);
               
        file_path.replace(p1, p2 - p1, result);
}
       
       
for(auto &file_path : paths)
        std::cout << file_path << '\n';
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 56 gości

cron