Mmm kalo memang rawnya dengan format seperti itu, memang bisa gunakan
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
ADVERTISEMENT
click here
Web Bug from http://us.adserver.yahoo.com/l?M=298184.5639630.6699735.3001176/D=groups/S=:HM/A=2434971/rand=422460914


Yahoo! Groups Links

Kirim email ke