我试图找出字符串中有多少正则表达式匹配.我正在使用迭代器迭代匹配,并使用整数来记录有多少.
long int before = GetTickCount();
string text;
boost::regex re("^(\\d{5})\\s(\\d{8})\\s(.*)\\s(.*)\\s(.*)\\s(\\d{8})\\s(.{1})$");
char * buffer;
long length;
long count;
ifstream f;
f.open("c:\\temp\\test.txt", ios::in | ios::ate);
length = f.tellg();
f.seekg(0, ios::beg);
buffer = new char[length];
f.read(buffer, length);
f.close();
text = buffer;
boost::sregex_token_iterator itr(text.begin(), text.end(), re, 0);
boost::sregex_token_iterator end;
count = 0;
for(; itr != end; ++itr)
{
count++;
}
long int after = GetTickCount();
cout << "Found " << count << " matches in " << (after-before) << " ms." << endl;
Run Code Online (Sandbox Code Playgroud)
在我的例子中,count总是返回1,即使我把代码放在for循环中以显示匹配(并且有很多).这是为什么?我究竟做错了什么? …
我正在为一个项目编写一堆集成测试.我想调用包含在try/catch块中的每个单独的集成点方法,这样当它失败时,我会得到某种反馈来显示,而不是仅仅崩溃应用程序.我还希望能够计算调用的时间,并在需要时检查返回值.所以,我有一个IntegrationResult类,其中包含一些基本描述,结果和时间已过去的属性:
class IntegrationResult
{
private StopWatch _watch;
public string Description {get;set;}
public string ResultMessage {get;set;}
public bool TestPassed {get;set;}
public string TimeElapsed {get { return _watch == null ? "0" : _watch.Elapsed.TotalMilliseconds.ToString(); } }
public void Start()
{
_watch = StopWatch.StartNew();
}
public void Stop()
{
_watch.Stop();
}
}
Run Code Online (Sandbox Code Playgroud)
我写的代码看起来像这样:
IntegrationResult result = new IntegrationResult();
result.Description = "T-SQL returns expected results";
try
{
result.Start();
SomeIntegrationPoint("potential arguments"); //This is the line being tested
result.Stop();
//do some check that correct data is …Run Code Online (Sandbox Code Playgroud) 我试图在一个按钮旁边水平居中加载器gif.我能弄清楚如何做到这一点的唯一方法是浮动gif并将其全部移动.有没有更好的办法?
在我的例子中,左边的加载器是我想要的,如果可能的话没有浮动.
我只需要在C中编码几次,而且每次我都这样做,它就变成了一些无法管理的野兽.
我已经在C#和.Net中完成了大部分的编程,因此我非常习惯于类风格的体系结构,但我似乎无法掌握C语言应用程序中的组织.我应该把函数定义放在一个文件中,将函数定义放在一个文件中,然后在另一个文件中处理,等等.这个主题有没有什么好的资源?
另请参阅:从面向对象的土地中挣扎?
我试图从ftp Web服务器自动执行一些上传/下载任务.当我通过客户端或通过Firefox连接到服务器时,为了进入我的目录,我必须指定这样的路径:
ftp://ftpserver.com/../AB00000/incoming/files
Run Code Online (Sandbox Code Playgroud)
如果我尝试访问此内容:
ftp://ftpserver.com/AB00000/incoming/files
Run Code Online (Sandbox Code Playgroud)
服务器抛出该目录不存在的错误.那么,问题是:
我试图用第一个ftp地址创建一个FTPWebRequest,但它总是解析"/../"部分,然后我的服务器说路径不存在.
我试过这些:
Uri target = new Uri("ftp://ftpserver.com/../AB00000/incoming/files");
FtpWebRequest request = (FtpWebRequest)WebReqeuest.Create(target);
Run Code Online (Sandbox Code Playgroud)
和
string target = "ftp://ftpserver.com/../AB00000/incoming/files";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(target);
Run Code Online (Sandbox Code Playgroud)
在第一位,当实例化Uri对象时,路径已经不正确,在第二位,它在WebRequest.Create方法之后.有什么想法发生了什么?
编辑:
另外,由于我发布了这个,我尝试使用no parse选项创建URI.我也尝试过这样的事情:
string ftpserver = "ftp://ftpserver.com/../";
string path = "12345/01/01/file.toupload";
Uri = new Uri(ftpserver, path, true);
Run Code Online (Sandbox Code Playgroud)
它总是解析根部分("/../").
我有一个脚本,它通过写入同一个控制台行显示show的上传进度.当脚本从一个cron作业运行,而不是写一行时,我会得到很多行:
*** E0710091001.DAT *** [0.67%]
*** E0710091001.DAT *** [1.33%]
*** E0710091001.DAT *** [2.00%]
*** E0710091001.DAT *** [2.66%]
*** E0710091001.DAT *** [3.33%]
*** E0710091001.DAT *** [3.99%]
*** E0710091001.DAT *** [4.66%]
*** E0710091001.DAT *** [5.32%]
*** E0710091001.DAT *** [5.99%]
*** E0710091001.DAT *** [6.65%]
*** E0710091001.DAT *** [7.32%]
*** E0710091001.DAT *** [7.98%]
*** E0710091001.DAT *** [8.65%]
*** E0710091001.DAT *** [9.32%]
*** E0710091001.DAT *** [9.98%]
*** E0710091001.DAT *** [10.65%]
*** E0710091001.DAT *** [11.31%]
*** E0710091001.DAT *** [11.98%]
*** E0710091001.DAT *** [12.64%]
*** E0710091001.DAT *** …Run Code Online (Sandbox Code Playgroud) 我正在编写一个应用程序,我可以通过多个步骤提供任务.我有一些类似于下面的代码,我想知道这是否是处理异常的常规方法.这个代码可能永远不会被其他任何人看到,但它可能是,所以我想知道我正在按照任何人的预期处理异常.
IEnumerable<Task> Tasks;
foreach(var task in Tasks)
{
try
{
//boiler plate prep for task (loading libraries, connecting, logging start, etc)
foreach(var step in task.Steps)
{
try
{
step.Execute();
}
catch(Exception ex)
{
LogStepError(step, ex);
throw;
}
}
//Notify parties task has been completed successfully, log task completion
}
catch(Exception ex)
{
LogTaskFailure(task);
}
finally
{
//close connections, etc
}
}
interface ITaskStep
{
void Execute()
{
}
}
Run Code Online (Sandbox Code Playgroud)
我还想补充一点,任务步骤正在实现ITaskStep接口,因此Execute的实现不是我自己的(在这个例子中,有人可以实现接口).我的代码只是加载库并运行任何ITasks及其ITaskSteps.
我有一个MVC3应用程序,我已经添加了几个简单的缓存变量作为属性.我添加了我的数据,Application_Start然后在控制器中尝试将其转换HttpContext.ApplicationInstance回我的类型以访问它.但是,该属性始终为null.这是一个例子:
编辑工作实例
public interface IMyMvcApp
{
Hashtable Cache {get;set;}
}
public class MvcApplication: HttpApplication, IMyMvcApp
{
public Hashtable Cache
{
get { return Context.Cache["MyStuff"] as Hashtable; }
set { Context.Cache["MyStuff"] = value}
}
public void Application_Start()
{
Cache = new Hashtable();
Cache.Add("key", new object());
}
}
public class AController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext context)
{
var myApp = context.HttpContext.ApplicationInstance as IMyMvcApp;
Assert.IsNotNull(myApp.Cache);
}
}
Run Code Online (Sandbox Code Playgroud) 我在我的角应用程序中使用html5mode,但是当我运行bower install时grunt,它将路径呈现为
<script src="bower_components/...
我可以改成这个吗?
<script src="/bower_components/...?
我已经<base href="/">在我的<head/>部分添加了一个标签,但是当我的页面尝试加载javascript时,他们仍然在寻找相对的网址.
因此对于/bower_components/script.js目前呈现
为的脚本<script src="bower_components/script.js"></script>,
启用时/login,页面会尝试加载/login/bower_components/script.js
编辑 按照@ sharpper的建议,我在下面添加了代码块,最后在Gruntfile.js中使用了这个:
// Automatically inject Bower components into the app
'bower-install': {
app: {
html: '<%= yeoman.app %>/index.html',
ignorePath: '<%= yeoman.app %>/',
fileTypes: {
html: {
block: /(([\s\t]*)<!--\s*bower:*(\S*)\s*-->)(\n|\r|.)*?(<!--\s*endbower\s*-->)/gi,
detect: {
js: /<script.*src=['"](.+)['"]>/gi,
css: /<link.*href=['"](.+)['"]/gi
},
replace: {
js: '<script src="/{{filePath}}"></script>', // <-- Change this line
css: '<link rel="/stylesheet" href="{{filePath}}" />' …Run Code Online (Sandbox Code Playgroud) 我有5个数据库,代表该国的不同地区.在每个数据库中,有几百个表,每个表有10,000-2,000,000个事务记录.每个表都是相应区域中客户的表示.这些表中的每一个都具有相同的模式.
我想查询所有表,就像它们是一个表一样.我能想到的唯一方法是创建一个联合所有表的视图,然后只针对它运行我的查询.但是,客户表将一直在变化(因为我们获得和失去客户),因此我必须更改我的视图的查询以包括新表(或删除不再使用的表).
有没有更好的办法?
在回应评论时,(我也将此作为对答案的回复):
在大多数情况下,我不会删除任何表格,它们将保留用于历史目的.正如我在一篇回复中发表评论时,其想法是减少较小客户(一个只有10,000条记录)的时间来查询自己的历史记录.大约有1000个客户平均有1,000,000行(并且正在增长).如果我要将所有记录添加到一个表中,那么该表中将有近十亿条记录.我还以为我正在计划未来,因为当我们说5000个客户时,我们没有一个巨大的表来保存所有交易记录(这可能是我的想法中的错误).那么,最好不要像我一样划分记录吗?我应该将它们全部混合到一张桌子里吗?对客户ID进行索引是否可以防止向小客户查询数据的延迟?