fungsi dari bung zamrony atau pake pos, tapi dengan sedikit modifikasi,
maka kita juga bisa tetap gunakan kelas TStringList.
s:= '12345;HELLO WORD;56789';
sl.QuoteChar := '"';
sl.Delimiter := ';';
s := stringReplace(Edit1.Text,'"','',[rfReplaceAll]);
sl.DelimitedText := '"' + stringReplace(s,';','";"',[rfReplaceAll]) +
'"';
Kelemahannya, tidak akan menampilkan karakter '"'
Semoga membantu
-----Original Message-----
From: Zamrony P Juhara [mailto:[EMAIL PROTECTED]
Sent: Thursday, December 02, 2004 1:57 PM
To: [EMAIL PROTECTED]
Subject: Re: Re[2]: [Delphindo] Delimiter non spasi
ini saya kopi dari unit classes,spasi memang digunakan
sebagai delimiter default selain delimiter yg
ditetapkan oleh programmer lewat property Delimiter.
tapi saya gak tau alasan team Delphi menggunakan spasi
ini sebagai default delimiter.
jadi kalo gak mau spasi di anggap delimiter yah
ubah aja SetDelimitedText ini
procedure TStrings.SetDelimitedText(const Value:
string);
var
P, P1: PChar;
S: string;
begin
BeginUpdate;
try
Clear;
P := PChar(Value);
while P^ in [#1..' '] do
{$IFDEF MSWINDOWS}
P := CharNext(P);
{$ELSE}
Inc(P);
{$ENDIF}
while P^ <> #0 do
begin
if P^ = QuoteChar then
S := AnsiExtractQuotedStr(P, QuoteChar)
else
begin
P1 := P;
//========================================
// karakter spasi dan delimiter diabaikan disini!
//========================================
while (P^ > ' ') and (P^ <> Delimiter) do
{$IFDEF MSWINDOWS}
P := CharNext(P);
{$ELSE}
Inc(P);
{$ENDIF}
SetString(S, P1, P - P1);
end;
Add(S);
while P^ in [#1..' '] do
{$IFDEF MSWINDOWS}
P := CharNext(P);
{$ELSE}
Inc(P);
{$ENDIF}
if P^ = Delimiter then
begin
P1 := P;
{$IFDEF MSWINDOWS}
if CharNext(P1)^ = #0 then
{$ELSE}
Inc(P1);
if P1^ = #0 then
{$ENDIF}
Add('');
repeat
{$IFDEF MSWINDOWS}
P := CharNext(P);
{$ELSE}
Inc(P);
{$ENDIF}
until not (P^ in [#1..' ']);
end;
end;
finally
EndUpdate;
end;
end;
atau pake saja kelas yang saya buat dibawah ini:
unit strSplit;
interface
uses classes,sysutils;
type TSplitString=class
private
FDelimiter:char;
FStrInput:string;
FStrOutput:TStringList;
public
constructor Create;
destructor Destroy;override;
procedure Split;
property StrInput:String read FStrInput write
FStrInput;
property StrOutput:TStringList read
FStrOutput;
published
property Delimiter:char read FDelimiter write
FDelimiter;
end;
implementation
constructor TSplitString.Create;
begin
FStrOutput:=TStringList.Create;
FStrInput:='';
FDelimiter:=#32; //default spasi
end;
destructor TSplitString.Destroy;
begin
FstrOutput.clear;
FstrOutput.Free;
inherited;
end;
procedure TSplitString.Split;
var i,len,nex:integer;
astr:string;
notdelimiter:boolean;
begin
fStrOutput.Clear;
len:=Length(FStrInput);
astr:='';
notDelimiter:=false;
for i:=1 to len do
begin
if (FStrInput[i]=FDelimiter) and (notDelimiter)
then
begin
FStrOutput.Add(astr);
notDelimiter:=false;
astr:='';
end else
if (FStrInput[i]<>FDelimiter) then
begin
notDelimiter:=true;
astr:=astr+FStrInput[i];
end;
end;
if astr<>'' then
FStrOutput.Add(astr);
end;
end.
cara penggunaannya:
str:TSplitString;
str:=TSplitString.Create;
try
str.StrInput:='12345;"HELLO WORD";56789';
str.Delimiter:=#59; //ascii karakter ; =59 ;
str.Split;
for i:=0 to str.strOutput.Count-1 do
begin
showMessage(str.StrOutput[i]);
end;
finally
str.Free;
end;
--- Fikri Ms <[EMAIL PROTECTED]> wrote:
>
> Hello Iwan,
>
> Wednesday, December 1, 2004, 5:28:53 AM, you wrote:
>
>
> ICS> Coba pake "
> ICS> Contoh:
>
> ICS> S := '12345;"HELLO WORD";56789';
>
> Wah ... jadi gak kena sasaran dong ..!
> Tujuannya raw data (dengan format pemisah semicolon
> ";") langsung
> diparsing dengan fungsi bawaan TStringlist.
> Kalo gitu mending bikin fungsi parsing sendiri
> dengan memanfaatkan
> Pos(Substr: string; S: string): Integer;
> Atau kalo PHP udah selesai dg Regex
>
> BTW : Dulu pernah nemu Regex for Delphi ... ada yg
> pernah pake gak ?
>
>
> Thanks
>
> --
> Best regards,
> Fikri
> mailto:[EMAIL PROTECTED]
>
>
>
> ------------------------ Yahoo! Groups Sponsor
> --------------------~-->
> $9.95 domain names from Yahoo!. Register anything.
>
http://us.click.yahoo.com/J8kdrA/y20IAA/yQLSAA/i7folB/TM
>
--------------------------------------------------------------------~->
>
>
> Berlangganan: [EMAIL PROTECTED]
> Stop Berlangganan:
> [EMAIL PROTECTED]
> Keluhan Milis(Unbouncing,spam,dll):
> [EMAIL PROTECTED]
> Yahoo! Groups Links
>
>
> [EMAIL PROTECTED]
>
>
>
>
>
>
__________________________________
Do you Yahoo!?
All your favorites on one personal page - Try My Yahoo!
http://my.yahoo.com
Berlangganan: [EMAIL PROTECTED]
Stop Berlangganan: [EMAIL PROTECTED]
Keluhan Milis(Unbouncing,spam,dll): [EMAIL PROTECTED]
Yahoo! Groups Links
Berlangganan: [EMAIL PROTECTED]
Stop Berlangganan: [EMAIL PROTECTED]
Keluhan Milis(Unbouncing,spam,dll): [EMAIL PROTECTED]
| Yahoo! Groups Sponsor | |
|
|
Yahoo! Groups Links
- To visit your group on the web, go to:
http://groups.yahoo.com/group/Delphindo/
- To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
- Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
