小编m.s*_*.s.的帖子

查找文件名中的数字并与其他人交叉引用它们

首先,我将快速描述我对此的动机和实际问题:
我经常处理大批量文件,更具体地说,我发现自己必须按照以下规则重命名:
它们可能都包含单词和数字,但仅限于一组数字正在递增而不是"常量".我需要提取那些只有那些数字并相应地重命名文件.例如:

Foo_1_Bar_2015.jpg
Foo_2_Bar_2015.jpg
Foo_03_Bar_2015.jpg
Foo_4_Bar_2015.jpg
Run Code Online (Sandbox Code Playgroud)

将被重命名:

1.jpg
2.jpg
3.jpg or 03.jpg (The leading zero can stay or go)
4.jpg
Run Code Online (Sandbox Code Playgroud)

所以我们开始的是一个带有std::wstring对象的向量,用于指定目录中的所有文件名.我敦促你停止阅读3分钟,并在继续我的尝试和问题之前考虑如何处理这个问题.我不希望我的想法在一个方向或另一个方向推动你,我总是发现新的想法是最好的.

现在,我有两种方法可以想到:

1)旧式C字符串操作和比较:
在我看来,这需要解析每个文件名并记住每个数字序列的位置和长度.这很容易存储在矢量中,或者存储在每个文件中.这很好用(基本上使用字符串搜索增加偏移量):

while((offset = filename_.find_first_of(L"0123456789", offset)) != filename.npos)
{
    size = filename.find_first_not_of(L"0123456789", offset) - offset;
    digit_locations_vec.emplace_back(offset, size);
    offset += size;
}
Run Code Online (Sandbox Code Playgroud)

之后我所拥有的是(位置,大小)对的向量,用于文件名中的所有数字,常量(通过使用动机中的定义)与否.
在此之后,随之而来的是混乱,因为您需要交叉引用字符串并找出需要提取的数字.这将随着文件数量(往往是巨大的)而呈指数增长,而不是提到每个字符串中的数字序列数.此外,不是非常易读,可维护或优雅.不行.

2)正则表达式

如果有正则表达式的使用,那就是这个.从第一个文件名中创建一个正则表达式对象,并尝试将其与下一个文件名匹配.成功?即时提取所需数量的能力.失败?添加有问题的文件名作为新的正则表达式对象,并尝试匹配现有的两个正则表达式.冲洗并重复.正则表达式看起来像这样:

Foo_(\d+)_Bar_(\d+).jpg
Run Code Online (Sandbox Code Playgroud)

或分别为每个数字序列创建一个正则表达式:

Foo_(\d+)_Bar_2015.jpg
Foo_1_Bar_(\d+).jpg
Run Code Online (Sandbox Code Playgroud)

其余的是蛋糕.随便继续匹配,在最好的情况下,它可能只需要一次通过!问题是......

我需要知道的是:

1)你能想到任何其他优越的方法来实现这一目标吗?几天来,我一直在撞墙.
2)尽管在第一种方法中字符串操作和矢量构造\破坏的成本可能很大,但与正则表达式对象的成本相比,它可能相形见绌.第二种方法,最坏的情况:与文件一样多的正则表达式对象.对于潜在的数千个文件,这会是灾难性的吗?
3)第二种方法可以根据两种可能性中的一种进行调整:很少有std::regex对象构造,很多regex_match调用或者反过来.哪个更昂贵,正则表达式对象的构造或尝试匹配字符串?

c++ regex string filenames

9
推荐指数
1
解决办法
236
查看次数

Wacom平板电脑Python界面

如果可能的话,我想从Python中获取Wacom数位板的压力敏感输入.有没有可用的Python库可以做到这一点?

python wacom interface

8
推荐指数
1
解决办法
3382
查看次数

java.lang.matlabR2014a中的ClassNotFo undExcepti on

我正在使用MATLAB R2014a.但有时会给我以下错误:

构造DataFlavor时出现异常"java.lang.ClassNotFoundException:com.intellij.codeInsight.editorActions.FoldingData":application/x-java-jvm-local-objectref; 类= com.intellij.codeInsight.editorActions.FoldingData

为什么?当然我使用pycharm IDE和MATLAB.是因为它吗?

matlab

8
推荐指数
2
解决办法
3686
查看次数

Dockerfile版本控制最佳实践

我们是一些正在开发C++应用程序的开发人员.

为了确保每个人都使用与远程生产服务器相同的库和依赖项,我们使用docker来编译localhost中的代码源.

我的问题是使用git与docker的最佳实践是什么?

  1. 将Dockerfile添加到源代码存储库
  2. 为我们所有的Dockerfiles创建一个专用的存储库
  3. 为每个Dockerfile创建了一个专用存储库
  4. 其他?

git docker devops

8
推荐指数
1
解决办法
3229
查看次数

验证所有依赖项的java compact配置文件

我试着评估我的java程序以及它的所有依赖项(包括传递的程序)是否适合java compact3配置文件.

我可以使用编译-profile compact3器开关编译我的程序,但这只会检查我的程序.

如何自动(例如使用maven)验证所有依赖项是否满足配置文件要求?我可以检查所有依赖项的源代码并使用上面的编译器开关手动构建它们,但这是不切实际的.

java maven

8
推荐指数
1
解决办法
311
查看次数

Actionscript 3.0:范围

教程通常不处理Actionscript中的范围.你能指点我一些文件和/或解释我应该知道些什么.我想避免某些课程引起的问题在某些地方不可见.

scope actionscript-3

7
推荐指数
1
解决办法
3523
查看次数

使用流中的常量参数创建对象

让我们假设我有一个班级

#include <iostream>
using namespace std;

class Test{
    public:
        friend istream& operator >> (istream& input, Test& test){
            input >> test.dummy;
            return input;
        };
        friend ostream& operator << (ostream& output, Test& test){
            output << test.dummy << endl;
            return output;
        };
    private:
        const int dummy;
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为虚拟是恒定的.有没有办法从文件加载并重新创建一个参数是常量的对象?

c++

7
推荐指数
1
解决办法
245
查看次数

在 c++ (linux) 中获取动态库目录

是否有任何编程方式来获取程序加载的动态库的位置?

我知道有可能获得“可执行”运行路径。但这对我来说还不够。

我正在开发一个具有一些依赖关系的外部库,我需要相应地指向它的位置。

例如,程序运行在:

/local/deepLearning/bin
Run Code Online (Sandbox Code Playgroud)

该程序使用位于以下位置的动态库:

/local/external/libs/faciesAnalysis
Run Code Online (Sandbox Code Playgroud)

我需要的是,在运行时,字符串

"/local/external/libs/facesAnalysis"
Run Code Online (Sandbox Code Playgroud)

我在 linux 上工作,有什么建议吗?

c++ linux

7
推荐指数
2
解决办法
2988
查看次数

linux内核将数据写入管道的位置

假设以下简单代码:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

main()
{
    int fd[2];                
    pipe(fd);
 // ...               
    write(fd, buf, VERY_BIG_NUMBER);
 // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题:

  1. 有人可以解释写入数据的位置吗?
  2. 它是写入用户空间或内核空间中的某个缓冲区吗?
  3. 可以写入管道的最大长度是多少?
  4. 由于管道写入是阻塞操作,因此效率内核不会做任何事情并等待读者将数据直接传递给它吗?

linux pipe

7
推荐指数
1
解决办法
842
查看次数

如何轻松覆盖多个重载方法?

假设我有一个接口和一个实现它的类,如下所示:

class IPrinter
{
public:
    virtual void print(int i, int base = 10) = 0;
    virtual void print(char c) = 0;
    virtual void print(char *s) = 0;
    virtual void print(float f) = 0;
    virtual void print(double d) = 0;
    virtual ~IPrinter() = default;
private:
    ...
}

class Printer : public IPrinter
{
public:
    void print(int i, int base = 10) override {...}
    void print(char c) override {...}
    void print(char *s) override {...}
    void print(float f) override {...}
    void print(double d) …
Run Code Online (Sandbox Code Playgroud)

c++ templates decorator

7
推荐指数
1
解决办法
137
查看次数