首先,我将快速描述我对此的动机和实际问题:
我经常处理大批量文件,更具体地说,我发现自己必须按照以下规则重命名:
它们可能都包含单词和数字,但仅限于一组数字正在递增而不是"常量".我需要提取那些只有那些数字并相应地重命名文件.例如:
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调用或者反过来.哪个更昂贵,正则表达式对象的构造或尝试匹配字符串?
如果可能的话,我想从Python中获取Wacom数位板的压力敏感输入.有没有可用的Python库可以做到这一点?
我正在使用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.是因为它吗?
我们是一些正在开发C++应用程序的开发人员.
为了确保每个人都使用与远程生产服务器相同的库和依赖项,我们使用docker来编译localhost中的代码源.
我的问题是使用git与docker的最佳实践是什么?
我试着评估我的java程序以及它的所有依赖项(包括传递的程序)是否适合java compact3配置文件.
我可以使用编译-profile compact3器开关编译我的程序,但这只会检查我的程序.
如何自动(例如使用maven)验证所有依赖项是否满足配置文件要求?我可以检查所有依赖项的源代码并使用上面的编译器开关手动构建它们,但这是不切实际的.
教程通常不处理Actionscript中的范围.你能指点我一些文件和/或解释我应该知道些什么.我想避免某些课程引起的问题在某些地方不可见.
让我们假设我有一个班级
#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)
这不起作用,因为虚拟是恒定的.有没有办法从文件加载并重新创建一个参数是常量的对象?
是否有任何编程方式来获取程序加载的动态库的位置?
我知道有可能获得“可执行”运行路径。但这对我来说还不够。
我正在开发一个具有一些依赖关系的外部库,我需要相应地指向它的位置。
例如,程序运行在:
/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 上工作,有什么建议吗?
假设以下简单代码:
#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)
现在我的问题:
假设我有一个接口和一个实现它的类,如下所示:
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)