一个CSV格式的字符串,如下:
9X4524LA-MFO,"KNIT SHIRT, WOVEN SHORT",116,CN我想为为每一段加上双引号,即"",变成:
"9X4524LA-MFO","KNIT SHIRT, WOVEN SHORT","116","CN"要注意:
1. 是一个标准的CSV格式
2. 可能有一些段已包含""("KNIT SHIRT, WOVEN SHORT")
3.可能一些段中包含逗号(见"KNIT SHIRT, WOVEN SHORT")
9X4524LA-MFO,"KNIT SHIRT, WOVEN SHORT",116,CN我想为为每一段加上双引号,即"",变成:
"9X4524LA-MFO","KNIT SHIRT, WOVEN SHORT","116","CN"要注意:
1. 是一个标准的CSV格式
2. 可能有一些段已包含""("KNIT SHIRT, WOVEN SHORT")
3.可能一些段中包含逗号(见"KNIT SHIRT, WOVEN SHORT")
解决方案 »
- 新人求教,VB如何调用这个DLL
- 最近CSDN邪了?
- 一个简单的窗口调用问题?????
- 如何用TStringList把注册表文件*.reg内容读出来?
- 已知窗体句柄,如何根据它获得窗体内所有控件的名称及其句柄?
- 请教一个关于数据库连接的问题
- 向数据库服务器传递数据
- 小弟头都晕了,这个程序哪里错了!!
- 如何将一个数据库(.dbf)中某个表的记录插入到另一个数据库(SQL Server)中的某个表中?
- 做Delphi的同志们,能不能提供一些漂亮有用的空间给我(VC)用?万分感谢
- 有谁用过cxDBDateEdit?为什么当输入数据时,设定好日期后,存时日期总会自动改变呢?
- 本人学delphi一年了,三人行必有我师。
var
I: Integer;
S: string;
begin
S := '';
with TStringList.Create do try
Delimiter := ',';
QuoteChar := '"';
DelimitedText := '9X4524LA-MFO,"KNIT SHIRT, WOVEN SHORT",116,CN';
for I := 0 to Count - 1 do
if Pos('"', Strings[I]) <= 0 then
S := S + Delimiter + AnsiQuotedStr(Strings[I], QuoteChar)
else S := S + Delimiter + Strings[I];
System.Delete(S, 1, Length(Delimiter));
finally
Free;
end;
ShowMessage(S);
end;
谁能帮忙解释一下吗?
AnsiQuotedStr和Delete我都知道
但是我就写不出这样的代码
不愧是4星用户啊!!
with TStringList.Create do
这样用是什么意思啊?
代碼寫得太精干了,非常好的利用了VCL!
因为我在大富翁也开了贴问此问题,所以现在把你这个最好的答案也转贴到了过去:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=2970299
发现了一个新问题:如果源字符串中包含了"呢?因为标准CSV格式是允许包含"的,只不过得成双出现,如下:9X4524LA-MFO,"KNIT SHIRT, WOVEN SHORT",116,CN,"""afdasf"请你好人做到底:)帮忙再花一点点脑筋:)
var
I: Integer;
S: string;
begin
S := '';
with TStringList.Create do try
Delimiter := ',';
QuoteChar := '"';
DelimitedText := '9X4524LA-MFO,"KNIT SHIRT, WOVEN SHORT",116,CN,"""afdasf"""';
for I := 0 to Count - 1 do
S := S + Delimiter + AnsiQuotedStr(Strings[I], QuoteChar);
System.Delete(S, 1, Length(Delimiter));
finally
Free;
end;
ShowMessage(S);
end;
我也改好了,但代码多了,而zswang大虾的反而代码更精简了! :(
zswang!厉害!
with a do
begin
aa
end;
表示aa属于a的一个属性和方法
但是我说的是
with TStringList.Create do
这样(TStringList.Create)用是什么意思啊?
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
S: string;
begin
S := '';
with TStringList.Create do try
Delimiter := ',';
QuoteChar := '"';
DelimitedText := '9X4524LA-MFO,"KNIT SHIRT, WOVEN SHORT",116,CN';
for I := 0 to Count - 1 do
if Pos('"', Strings[I]) <= 0 then
S := S + Delimiter + AnsiQuotedStr(Strings[I], QuoteChar)
else S := S + Delimiter + Strings[I];
System.Delete(S, 1, Length(Delimiter));
finally
Free;
end;
ShowMessage(S);
end;这个Count是TStringList的方法或属性
而不是TStringList.creat的方法或属性吧???
TStringList.Create返回一个TStringList类型的实例,Count就是这个实例的属性。to zswang:
又出现新的问题了:
如果把
'9X4524LA-MFO,"KNIT SHIRT, WOVEN SHORT",116,CN,"""afdasf"""'
改成
'9X452 4LA-MFO,"KNIT SHIRT, WOVEN SHORT",116,CN,"""afdasf"""'
即有空格而没有被括住,结果会变成:
"9X452","4LA-MFO","""KNIT SHIRT, ""WOVEN SHORT""","116","CN"
我想到了解决方法,就是先临时把所有空格代码替换为另一个串,最后再替换回来。
但我想看看zswang的更优雅的方法。