我写了一个脚本来清理.csv文件,删除一些坏的逗号和坏的引号(坏,意味着它们打破了我们用来转换这些文件的内部程序),使用sed:
# remove all commas, and re-insert the good commas using clean.sed
sed -f clean.sed $1 > $1.1st
# remove all quotes
sed 's/\"//g' $1.1st > $1.tmp
# add the good quotes around good commas
sed 's/\,/\"\,\"/g' $1.tmp > $1.tmp1
# add leading quotes
sed 's/^/\"/' $1.tmp1 > $1.tmp2
# add trailing quotes
sed 's/$/\"/' $1.tmp2 > $1.tmp3
# remove utf characters
sed 's/<feff>//' $1.tmp3 > $1.tmp4
# replace original file with new stripped version and delete .tmp files
cp …Run Code Online (Sandbox Code Playgroud) 我有一个关于Lazarus的项目,我想用gcc编译一个源代码,为此我有一个TOpenDialog被叫OpenDialog1和一个TProcess被调用的AProcess.
我用这段代码调用gcc:
procedure TFormMain.btCompileClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
AProcess := TProcess.Create(nil);
try
AProcess.CommandLine := 'gcc.exe ' + OpenDialog1.FileName;
AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
AProcess.Execute;
OutputMemo.Lines.BeginUpdate;
OutputMemo.Lines.Clear;
OutputMemo.Lines.LoadFromStream(AProcess.Output);
OutputMemo.Lines.EndUpdate;
finally
AProcess.Free;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
它编译好(Lazzarus上的项目),但是当我测试它时,通过尝试编译源test.c,位于C:\Documents and Settings\Nathan Campos\Desktop,我得到了这个OutputMemo:
'C:\ Documents':没有这样的文件或目录
然后,OpenDialog1没有得到空格的完整路径,或者gcc无法在带空格的文件夹上找到它.
有什么建议可以帮助我吗?
为了唯一地识别每个设备,我想使用IMEI(或CDMA设备的ESN号码).如何以编程方式访问?
在Python中,如果我想提供一个没有源代码的应用程序,我可以将它编译成字节码.pyc,有没有办法在Ruby中做类似的事情?
如果我有这样的枚举:
public enum Letter {
A,
B,
C,
//...
}
Run Code Online (Sandbox Code Playgroud)
随机选择一个的最佳方法是什么?它不需要是生产质量的防弹,但相当均匀的分布将是不错的.
我可以做这样的事情
private Letter randomLetter() {
int pick = new Random().nextInt(Letter.values().length);
return Letter.values()[pick];
}
Run Code Online (Sandbox Code Playgroud)
但有更好的方法吗?我觉得这是以前已经解决的问题.
我正在异步地将一些文件下载到一个大字节数组中,并且我有一个回调函数会在某些数据添加到该数组时定期触发.如果我想让开发人员能够使用添加到数组中的最后一块数据,那么......那我该怎么做呢?在C++中,我可以给它们一个指向中间位置的指针,然后告诉它们在上一次操作中添加的字节数,这样它们至少知道它们应该看的块...我真的不知道我想给他们第二份那些数据,这只是浪费.
我只是想在人们想要在文件下载完成之前处理这些数据.有人真的想这样做吗?或者它无论如何都是无用的功能?我已经有一个回调,当缓冲区(整个字节数组)已满,然后他们可以转储整个事情而不用担心起点和终点......
使用http://www.cppreference.com/wiki/stl/deque/insert作为参考,我在某些位置将值插入到双端队列中.
例如,如果deque A是:
a, b, d, e, g
Run Code Online (Sandbox Code Playgroud)
使用指向d的迭代器,我可以:
A.insert(iter, c); // insert val c before loc iter
//deque is now a, b, c, d, e, g
Run Code Online (Sandbox Code Playgroud)
并且iter仍然指向d.但是,当iter指向g时,最后一个元素:
A.insert(iter, f);
//deque is now a, b, c, d, e, f, g
Run Code Online (Sandbox Code Playgroud)
但它现在指向f !!
我目前的解决方法是:
iter = A.insert(loc, val); // point iterator to element that was inserted before loc
iter++; // point iter back to loc
Run Code Online (Sandbox Code Playgroud)
我没有再测试过这个或者任何东西,花了这么多时间跟踪一个错误,只是为了发现插入()在所有地方的stl中的不一致行为很烦人.
与其他任何位置相比,为什么insert()在最后表现不同?还是我做错了什么?
任何人都知道这段代码的问题是什么?
let rec Foo(a,b) =
match a () with
| None -> Some(b)
| Some(c) -> Some(Foo(c,b))
Run Code Online (Sandbox Code Playgroud)
这是编译器错误:
"类型不匹配.期待'a但给定'一个选项结果类型在统一''a'和''选项'时将是无限的"
我正在编写一个非常简单的名称/值编辑器控件,其中值是可编辑的 - 左侧的标签和右侧的属性文本框。控件工作正常,只是当用户在右侧的“值”文本框之一内按 TAB 时,焦点将从我的控件转移到层次结构中的下一个控件。我希望焦点转到控件中的下一个文本框,以便用户可以在属性文本框之间进行切换。我尝试将“IsTabStop”设置为 true 但似乎不起作用。
这是我的数据模板:
<DataTemplate x:Key="myDataTemplate">
<StackPanel>
<TextBlock Text="{Binding Name}" />
<TextBox IsTabStop="True" Text="{Binding Value, Mode=TwoWay}" />
</StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud) 在其他地方的回复中,我找到了以下代码段:
一般来说,让C调用者分配内存而不是被调用者更好 - 因此在我看来strcpy是一个"更好"的函数,而不是strdup.
我可以看到这是一个有效的模式,但为什么它可以被认为更好?遵循这种模式是否有优势?或不?
最近我写了大量的代码,看起来像:
struct foo *a = foo_create();
// do something with a
foo_destroy(a);
Run Code Online (Sandbox Code Playgroud)
如果foo它不是一个扁平结构,那么我想我可以将所有初始化放在一个步骤中.另外,假设结构应该在堆上.为什么这样做会更好:
struct foo *a = malloc(sizeof(foo));
foo_init(a);
// do something with a
foo_destroy(a)
Run Code Online (Sandbox Code Playgroud)