我目前的项目分为3个部分:网站,桌面客户端和第三方程序的插件.我们最初使用Subversion开始我们的源代码控制,但在阅读Joel Spolsky的最后帖子后决定尝试Mercurial .考虑到我们之前没有真正使用过svn的大部分潜力,我们认为从源控制如何工作的一些基本想法开始,这将使这种转变变得容易.
但是,在设置了我们的初始存储库之后,我们很遗憾标记和分支应该如何在这样的项目上工作.
基本上,我们同时处理所有这三个部分.我们希望发布版本是3个部分的组合.目前我们正在一个存储库中工作.
对于Plug-in部分,我们已经完成了第一次迭代,我们将其称为Plug-In v0.1.对于其他两个部分的第一次正式构建,我们还想将它们称为网站v0.1和桌面客户端v0.1.当所有三个部分都在v0.1时,我们希望有一个完整的项目v0.1.
我们的问题是我们不确定如何在Hg存储库中管理所有这些.处理此问题的最佳方法是为3个稳定版本创建3个单独的存储库,然后为当前开发创建3个存储库吗?目前我们将这一切都集中在一个存储库中 我们应该在分支机构中执行此操作(分支是否与克隆存储库不同?)和标记?
任何帮助是极大的赞赏.
我试图使用os.system()来调用另一个接受输入和输出文件的程序.由于文件夹名称较长,我使用的命令约为250个字符.
当我尝试调用命令时,我收到一个错误:The input line is too long.
我猜是有一个255 character limit(它使用C系统调用构建,但我也找不到限制).
我试图改变与目录os.chdir(),以减少文件夹小道长,但是当我尝试使用os.system()与"..\folder\filename"它显然不能处理的相对路径名.有没有办法绕过这个限制或让它识别相对路径?
我写了一个C#程序来读取Excel .xls/.xlsx文件并输出到CSV和Unicode文本.我写了一个单独的程序来删除空白记录.这是通过读取每一行来完成的StreamReader.ReadLine(),然后通过字符串逐个字符地进行,如果它包含所有逗号(对于CSV)或所有选项卡(对于Unicode文本),则不将该行写入输出.
当Excel文件在单元格内包含嵌入的换行符(\ x0A)时,会发生此问题.我将我的XLS更改为CSV转换器以找到这些新行(因为它逐个单元格)并将它们写为\ x0A,而普通行只使用StreamWriter.WriteLine().
在单独的程序中发生问题以删除空白记录.当我读入时StreamReader.ReadLine(),根据定义它只返回带有行的字符串,而不是终止符.由于嵌入的换行符显示为两个单独的行,我无法分辨哪个是完整记录,哪个是我将它们写入最终文件时的嵌入式换行符.
我甚至不确定我能读到\ x0A,因为输入上的所有内容都注册为'\n'.我可以逐字逐句,但这会破坏我删除空行的逻辑.
我正在尝试在运行SQL Server 2005的Windows机器上使用sqlcmd来编写查询到csv文件.我们通常使用的命令行选项是:
-l 60 -t 300 -r 1 -b -W -h -1
Run Code Online (Sandbox Code Playgroud)
但是,列被截断为256字节.为了避免这种情况,我尝试使用此命令行选项代替-W:
-y 8000
Run Code Online (Sandbox Code Playgroud)
这捕获了整个字段,但是这个方法的问题是由于所有额外的空间,文件从超过1mb到大约200mb(我意识到8000可能是矫枉过正,但它可能必须至少4000并且我目前只处理一小部分数据).-W选项通常会消除所有这些额外空间,但当我尝试将它们一起使用时,它告诉我它们是互斥的.
有没有办法让sqlcmd在这个限制附近,或者是否有人知道另一个程序(如bcp或osql)是否会使这更容易?
编辑: 以下是我们用于获取被截断字段的代码片段(类似的代码用于一堆字段):
SELECT ALIASES.AliasList as complianceAliases,
Run Code Online (Sandbox Code Playgroud)
...
LEFT OUTER JOIN (Select M1.ID, M1.LIST_ID,stuff((SELECT '{|}' + isnull(Content2,'')+' '+isnull(Content3,'')+' '+isnull(Content4,'')+' '+isnull(Content5,'')+' '+isnull(Content6,'')+' '+isnull(Content7,'')
FROM fs_HOST3_TEST_web.ISI_APP_COMP_MULTI M2 with (nolock)
WHERE M1.LIST_ID = M2.LIST_ID and M1.ID = M2.ID and M1.TYPE = M2.TYPE
FOR XML PATH('')
),1,1,'') as AliasList
FROM fs_HOST3_TEST_web.ISI_APP_COMP_MULTI M1 with (nolock)
WHERE M1.LIST_ID = 2001 AND M1.TYPE = 'Aliases'
GROUP BY m1.list_id,m1.ID,m1.Type) as ALIASES …Run Code Online (Sandbox Code Playgroud) 有谁知道现在有一个支持Python 3.0.1的Windows Python可执行创建程序吗?似乎py2exe和pyInstaller,以及我发现的所有其余部分,仍然没有接近支持3.0或3.0.1.
任何帮助是极大的赞赏.
编辑:我想我可以将程序降级到较旧版本的Python,以使其与py2exe一起使用.最难的部分可能是使用旧版本的Tkinter.
有没有人幸运使用py2exe或pyInstaller(或其他Windows友好程序)来创建一个使用Tkinter和子进程的可执行文件.
我实际上不确定如何获得我的程序将被安装到的目录,因此子进程可以找到我正在使用的可执行程序.
最终编辑:我能够找到ini文件中的重复字段.谢谢大家的帮助!
我正在使用正则表达式来解析ini文件,使用LINQ将其存储在Dictionary中:
示例数据:
[WindowSettings]
窗口X Pos ='0'
窗口Y Pos ='0'
窗口最大化='false'
窗口名称='Jabberwocky'
[记录]
目录='C:\ Rosetta Stone\Logs'
编辑:这是实际导致问题的文件:http://pastebin.com/mQSrkrcP
EDIT2:我把它缩小到由文件的最后一部分引起:[list_first_nonprintable]
由于某种原因,我正在解析的文件之一是抛出此异常:
System.ArgumentException:已添加具有相同键的项.
有没有办法让我找出导致问题的键(所以我可以修复文件),或者只是跳过导致这个问题的键并继续解析?
这是代码:
try
{
// Read content of ini file.
string data = System.IO.File.ReadAllText(project);
// Create regular expression to parse ini file.
string pattern = @"^((?:\[)(?<Section>[^\]]*)(?:\])(?:[\r\n]{0,}|\Z))((?!\[)(?<Key>[^=]*?)(?:=)(?<Value>[^\r\n]*)(?:[\r\n]{0,4}))*";
//pattern = @"
//^ # Beginning of the line
//((?:\[) # Section Start
// (?<Section>[^\]]*) # Actual Section text into Section Group
// (?:\]) # Section End then EOL/EOB
// (?:[\r\n]{0,}|\Z)) …Run Code Online (Sandbox Code Playgroud) 编辑:我决定采用推荐的LINQ to XML方法(请参阅下面的答案),除了我不能用增量文件中的记录替换已更改的记录外,一切都有效.我设法通过删除完整文件节点然后添加增量节点来使程序工作.有没有办法只交换它们?此外,虽然这个解决方案非常好,有没有办法缩小内存使用而不会丢失LINQ代码?这个解决方案可能仍然有效,但我愿意花时间来降低内存使用量.
我正在尝试获取两个XML文件(完整文件和增量文件)并将它们合并在一起.XML文件如下所示:
<List>
<Records>
<Person id="001" recordaction="add">
...
</Person>
</Records>
</List>
Run Code Online (Sandbox Code Playgroud)
recordaction属性对于更改也可以是"chg",对于删除也可以是"del".我的程序的基本逻辑是:
1)将完整文件读入XmlDocument.
2)将增量文件读入XmlDocument,使用XmlDocument.SelectNodes()选择节点,将这些节点放入字典中以便于搜索.
3)选择完整文件中的所有节点,循环并根据包含增量记录的字典检查每个节点.如果recordaction ="chg"或"del"将节点添加到列表中,则从该列表中的XmlNodeList中删除所有节点.最后,将增量文件中的recordaction ="chg"或"add"记录添加到完整文件中.
4)保存XML文件.
我在第3步遇到了一些严重的问题.这是该函数的代码:
private void ProcessChanges(XmlNodeList nodeList, Dictionary<string, XmlNode> dictNodes)
{
XmlNode lastNode = null;
XmlNode currentNode = null;
List<XmlNode> nodesToBeDeleted = new List<XmlNode>();
// If node from full file matches to incremental record and is change or delete,
// mark full record to be deleted.
foreach (XmlNode fullNode in fullDocument.SelectNodes("/List/Records/Person"))
{
dictNodes.TryGetValue(fullNode.Attributes[0].Value, out currentNode);
if (currentNode != null)
{
if …Run Code Online (Sandbox Code Playgroud) 我正在使用tkinter和Python为将Excel文件转换为CSV的程序创建用户界面.
我创建了一个标签作为状态栏,并将statusBarText设置为StringVar()作为textvariable.inputFileEntry和outputFileEntry是包含输入和输出文件路径的文本变量.
def convertButtonClick():
statusBarText.set('Converting...')
if inputFileEntry.get() == '' or outputFileEntry.get() == '':
statusBarText.set('Invalid Parameters.')
return
retcode = subprocess.('Program.exe' ,shell=true)
if retcode == 0:
statusBarText.set('Conversion Successful!')
else:
statusBarText.set('Conversion Failed!')
Run Code Online (Sandbox Code Playgroud)
单击转换按钮时会调用此函数,一切正常,但状态栏永远不会更改为"转换...".
如果输入或输出为空,状态栏文本将更改为无效参数,并且将根据返回代码更改为成功或失败.问题是它永远不会改变为'转换......'
我已经将那条确切的行复制并粘贴到if语句中并且它工作正常,但由于某种原因,它只是在子进程运行之前永远不会更改它位于函数顶部.任何帮助将不胜感激.
所以我有这些巨大的XML文件(和巨人,我的意思是1.5GB +),他们没有CRLF.我正在尝试运行类似diff的程序来查找这些文件之间的差异.
由于我还没有找到一个不会因内存耗尽而爆炸的差异程序,我决定最好的办法是在关闭标签后添加CRLF.
我写了一个python脚本来读取char-by-char并在'>'之后添加新行.问题是我的单核PC大约1995年或荒谬的东西上运行这一点,它只是处理约20MB /小时的时候我已经都在同一时间转换.
任何想法,如果用C#/ C/C++写这个将产生任何好处?如果没有,有没有人知道将逐字节的diff程序?谢谢.
编辑:
这是我的处理功能的代码......
def read_and_format(inputfile, outputfile):
''' Open input and output files, then read char-by-char and add new lines after ">" '''
infile = codecs.open(inputfile,"r","utf-8")
outfile = codecs.open(outputfile,"w","utf-8")
char = infile.read(1)
while(1):
if char == "":
break
else:
outfile.write(char)
if(char == ">"):
outfile.write("\n")
char = infile.read(1)
infile.close()
outfile.close()
Run Code Online (Sandbox Code Playgroud)
EDIT2: 感谢您的回复.增加读取大小创造了令人难以置信的速度提升.问题解决了.
c# ×4
python ×4
batch-file ×1
character ×1
command-line ×1
dictionary ×1
executable ×1
function ×1
ini ×1
label ×1
linq ×1
mercurial ×1
newline ×1
nodes ×1
performance ×1
py2exe ×1
pyinstaller ×1
readline ×1
regex ×1
replace ×1
sql ×1
sql-server ×1
sqlcmd ×1
statusbar ×1
streamreader ×1
svn ×1
tkinter ×1
xml ×1