我正在开发一个导入数千行的应用程序,其中每行都有这样的格式:
|* 9070183020 |04.02.2011 |107222 |M/S SUNNY MEDICOS |GHAZIABAD | 32,768.00 |
Run Code Online (Sandbox Code Playgroud)
我使用以下内容Regex将行拆分为我需要的数据:
Regex lineSplitter = new Regex(@"(?:^\|\*|\|)\s*(.*?)\s+(?=\|)");
string[] columns = lineSplitter.Split(data);
foreach (string c in columns)
Console.Write("[" + c + "] ");
Run Code Online (Sandbox Code Playgroud)
这给了我以下结果:
[] [9070183020] [] [04.02.2011] [] [107222] [] [M/S SUNNY MEDICOS] [] [GHAZIABAD] [] [32,768.00] [|]
Run Code Online (Sandbox Code Playgroud)
现在我有两个问题.
1.如何删除空结果.我知道我可以用:
string[] columns = lineSplitter.Split(data).Where(s => !string.IsNullOrEmpty(s)).ToArray();
Run Code Online (Sandbox Code Playgroud)
但有没有内置的方法来删除空结果?
2.如何拆除最后一根管子?
谢谢你的帮助.
此致,
Yogesh.
编辑:
我认为我的问题有点误解.从来没有关于我如何做到这一点.这只是关于如何通过更改Regex上面的代码来实现它.
我知道我可以在很多方面做到这一点.我已经使用上面提到的代码和一个Where子句以及另一种方式(也是两倍以上)更快地完成了它:
Regex regex = new …Run Code Online (Sandbox Code Playgroud) 我想知道有没有办法从数据库中排除一些字段?例如:
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public string FatherName { get; set; }
public bool IsMale { get; set; }
public bool IsMarried { get; set; }
public string AddressAs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如何从数据库中排除AddressAs字段?
我已经阅读了无数关于C#4.0新功能的博客,帖子和StackOverflow问题.即使是新的WPF 4.0功能也已经开始公开.我找不到并想知道的事情:
我认为,在内部,大多数更改都是针对新的动态语言和并行编程.但是还有其他重大改进吗?因为语言改进只是语言的改进.您只需要新的编译器,除了版本1.0/1.1(至少大部分都可以使用)之外,这些功能可以与较低版本的.Net一起使用.
如果以上功能是唯一的,只有这些功能版本更改为4.0,我认为是4.0,因为基于.Net 4.0版本(即1.0/1.1,2.0和3.0/3.5之后).版本增量是否合理?
编辑:
正如Pavel Minaev在评论中指出的那样,即使这两个特征也是CLR独立的.3.0和3.5也有速度和其他改进.那么为什么版本会增加?
我是一个从事许多.Net项目的独立程序员.我独自工作,直到现在我还没有使用版本控制.就在最近,我了解了使用版本控制的好处.因为我有三台机器,所以保持项目的同步版本有时会被证明是太多了.所以,现在我打算使用subversion作为我的版本控制服务器.
话虽如此,我在许多主题,博客等中读到了关于为单个开发人员使用版本控制的好处.我同意他们中的大多数,但他们大多数没有讨论的一件事是,如何使用SVN而不实际依赖于您的某个特定系统作为服务器.我想这样做的原因是因为我的所有系统几乎都没有处于"永远在线"状态.因此,如果我在我的主桌面上托管我的存储库,如果我的桌面关闭(或者我在这里丢失了什么东西,我可能无法在我的笔记本电脑上工作)
这就是为什么,我想知道我可以在我的GoDaddy共享主机帐户中托管我的subversion存储库并从我拥有的三台计算机访问它们吗?
或者,我可以使用任何免费(和快速)的在线svn存储库吗?我现在尝试不使用任何gui客户端,因为我想先用svn清除我的基础知识,但后来我打算使用TortoiseSVN作为我的客户端.
我知道有很多关于使用MEF的构造函数参数注入的问题,但我的有点不同.
我想知道,有没有什么办法,以不同的参数值传递给当我使用的组合部分的构造PartCreationPolicy(CreationPolicy.NonShared)和GetExportedValue?
例如:
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export]
public partial class Foo
{
[ImportingConstructor]
public Foo([Import("SomeParam")]object parameter)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
和其他地方......
container.ComposeExportedValue("SomeParam", "Some value...");
var instance = container.GetExportedValue<Foo>();
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我只能使用ComposeExportedValue一次,因为第二次运行会导致a ChangeRejectedException.
所以,我的问题是:
SomeParam对于每个新实例,还有其他方法可以更改上述场景中的值吗?System.Collections.Concurrent.ConcurrentQueue我在调用之前将参数值排入队列GetExportedValue,然后在部件的构造函数中将值取列.但这是一个黑客攻击,也会产生比它解决的问题更多的问题.谢谢你的帮助.:)
问候,
Yogesh Jagota
我正在使用System.Timers.Timer每 10 秒执行一次操作。如果出现某些特殊情况或通过 UI,也可以通过其他方法调用此操作。如果没有从计时器调用该操作,我只需重置计时器。
我正在使用的代码...
timer = new Timer();
timer.Elapsed += (sender, args) => ExecuteAction();
timer.Interval = 10000;
timer.Enabled = true;
public void ExecuteActionAndResetTimer()
{
ExecuteAction();
timer.Stop();
timer.Start();
}
private void ExecuteAction()
{
// do the work...
}
Run Code Online (Sandbox Code Playgroud)
预期的结果,如果“X”是从计时器(即,所谓的动作ExecuteAction),“ X ”从外部计时器(即所谓的动作ExecuteActionAndResetTimer)和“o”是第二:
XooooXo X o X ooooXo X ooooX
这工作正常。我只想知道我们可以使用反应式扩展来做到这一点吗?
谢谢。
我有一个要求,在10秒的初始延迟之后,我需要SomeMethod每10分钟执行一次,但是在完成之后应该启动10分钟计时器SomeMethod.这是一个粗略的例子:
Start Task 00:00:00
(10 second delay)
SomeMethod executed at 00:00:10 (takes 15 minutes)
(10 minute delay)
SomeMethod executed at 00:25:10
... and so on.
Run Code Online (Sandbox Code Playgroud)
我知道如何使用TPL来做到这一点.我可以使用Task.Delay启动任务并执行SomeMethod,然后在每次完成(ContinueWith TaskStatus.RanToCompletion)之后,我创建一个新任务并SomeMethod再次执行.
我的问题是,这有可能使用Observable.Timer吗?就像是...
Observable.Timer(TimeSpan.FromSeconds(10), TimeSpan.FromMinutes(10))
Run Code Online (Sandbox Code Playgroud)
这段代码的问题是,如果SomeMethod需要15分钟,我将SomeMethod运行两个不同的实例,这是我不想要的.我希望10分钟计时器在 SomeMethod完成后启动.这可能是使用Observable或应该留在TPL吗?
编辑:忘了提到我想SomeMethod在它自己的线程中运行.
当SelectionMode设置为Single时,WPF中的ListView/GridView中存在一个奇怪的错误.
重现方式:
生成一个集合(集合必须有足够的项目,以便ListView至少可以滚动2-3页):
var customers = from c in _db.Customers
orderby c.Name, c.City
select c;
Run Code Online (Sandbox Code Playgroud)
将集合绑定到ListView:
dataGrid.ItemsSource = customers.ToList();
Run Code Online (Sandbox Code Playgroud)
在第一页上,将您的选择更改为3-4项.记住您之前选择的项目.使用鼠标滚轮向下滚动,以便您进入下一页.向后滚动.瞧!你会看到你点击的所有项目都被选中了?!此错误的图片:http: //img261.imageshack.us/img261/133/listview.jpg
同样的问题也困扰着Wpf工具包的数据网格.
更奇怪的是,每个选择都附加到SelectedItems属性.因此,如果您更改了10次选择,则SelectedItems属性中将包含10个项目,并将当前选择作为最后一项.
有人能告诉我为什么会这样吗?这是故意还是错误?对我来说似乎更像是一个错误.
其他人也遇到过这个bug.旧文章,但错误仍然存在:http: //cs.blueberryislandmedia.com/blogs/blueberries/archive/2009/04/24/bug-in-wpf-listview-single-selection-mode.aspx