String型に渡すには?

解決


ゆうこりん  2006-04-07 11:18:37  No: 20903  IP: 192.*.*.*

パラメータの渡し方で質問です。
エラー内容:コンパイル時に「変数パラメータに定数オブジェクトを渡すことはできません」
”StringL2[0]”をString型のパラメータに渡すにはどうのようにするとよろしいでしょうか?

    IBDatabase1.Connected:=Active;
    StringL1:=TstringList.Create;
    StringL2:=TstringList.Create;

    if Opendialog1.Execute then begin
      StringL1.LoadFromFile(Opendialog1.FileName);
      for i:=0 to StringL1.Count-1 do begin
        StringL2.CommaText := StringL1[i];
********************************
       yzx(StringL2[0]); 
********************************
      end;
    end;
   
function TForm1.yzx(var Str:String):String;
begin
  処理
end;

編集 削除
ん?  2006-04-07 11:35:24  No: 20904  IP: 192.*.*.*

var
  hogehoge:String;

  hogehoge := StringL2[0];
  yzx(hogehoge);
  StringL2[0] := hogehoge;

編集 削除
ゆうこりん  2006-04-07 12:01:49  No: 20905  IP: 192.*.*.*

ありがとうございます。

でも項目がたくさんあるんですよ...

この方法がベストでしょうか?

編集 削除
こりん星人  2006-04-07 12:49:44  No: 20906  IP: 192.*.*.*

めっせーじ:「StringListそのものを引数で渡せ」

編集 削除
姑息な手段  2006-04-11 16:41:05  No: 20907  IP: 192.*.*.*

何かのコンバーターみたいなものでしょうか。
別に見た目を気にしないとか、今使えれば、もうソースはいらないとか
言うのであれば、

procedure hoe
var
  i: integer;
  procedure yzx;
  begin
      StringL2.CommaText:= StringL1[i];
      //処理
  end;
begin
   for i:=0 to StringL1.Count-1 do
   begin
      yzx;
   end;
end;

のような姑息な手段もあります。
ただ、コンパイル時に yzx は展開されると聞いたことがある(遥か昔)
バイナリーはずらずらと yzx の中身を書き連ねたものになるとか
ならないとか。

編集 削除
こりん星からのメッセージです  2006-04-12 08:24:09  No: 20908  IP: 192.*.*.*

********************************
       yzx(StringL2, 0); 
********************************


function TForm1.yzx(Strs:TStringList; i:Integer):String;
var
  str:String;
begin
  str := Strs[i];
  処理
  Strs[i] := str;
end;

編集 削除
ゆうこりん  2006-04-12 13:34:57  No: 20909  IP: 192.*.*.*

ありがとうございました。
大変、参考になりました。

編集 削除