• ベストアンサー

delphiで配列を、コピーするには。

delphiで配列をコピーするには、どうしたらいいのでしょうか? Betr_Hairetu := Moto_Hairetu ; としたいのですが。 Betr_Hairetu := Copy(Moto_Hairetu, 0 ,Length( Moto_Hairetu ) ); では、ダメでした。 ループで、一から入れ直せばいいのですが、かっこわるいなー・・・。 なにか、簡単な関数があるとは思うのですが、探すことができませんでした。 よろしくお願いします。

noname#49406
noname#49406

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

本来のパスカルでは、配列と文字列(ストリング)は異質であって 相容れるものではありません。 DelphiのCopy関数は、文字列をコピーするものであって 配列をコピーするものではありません。 ちなみに、Copy関数の第2引数に0が指定されることはありません Delphiの文字列のインデクスは1から始まります ところが、Delphiのあるバージョンから、array[] of char と string が 同じように扱われるようになったので、やや混乱すると思います。 ですが、Delphiでは、文字配列かstringかをはっきり区別して使用するほうが 無難です。 質問では、配列としか書かれていないので、整数の配列か、はたまたレコードの配列か わかりませんが、 var ar1, ar2 :array[0..5] of integer; begin for i := 0 to 5 do ar1[i] := i * 11; Move(ar1,ar2, SizeOf(ar1)); end と Move関数が使えます また、OSがWindowsで、Win32を使えるなら CopyMemory関数を使う方法もあります。

noname#49406
質問者

お礼

なるほどー。 やはり、変数の型がポイントになりますね。 ありがとうございます。 >Copy関数の第2引数に0が指定されることはありません 訂正ありがとうございます。 ありがとうございます。

関連するQ&A

  • delphiで、配列がなくなったら場合

    確か、PHPでは、配列の最後まで行った事を調べる時に array[x] == '' と出来たと思います。 delphiで、こういった事はできないのでしょうか? 関数でもいいですし、構文でもけっこうです。 ちょっと知りたくって。 ・・・ 配列をカウントして、Lengthで配列の数を調べれば、特に問題はないんですが・・・。Length(FileHairetu)

  • Delphiで配列をファイルに出力する方法

    Delphi(Pascal)について質問します。 fortranでできるファイルへの配列の出力をDelphiでどのようにプログラムするか教えて頂きたいと思います。 2次元配列a(i,j)の出力はfortranでは以下のようなプログラムになります。 open(10,.省略...) ファイルを指定して開く do j=1,ny                ループj   write(10,'(100f10.3)') (a(i,j),i=1,nx) ループi+書き出し enddo                  ループjの最後尾  close(10)                ファイルを閉じる 100f10.3というのは小数点3桁の実数で10カラムで表現したものが100個並ぶという意味です。これと同じことをやるDelphiプログラムを教えて頂きたいのですが。私の手元にある本にはやり方が載っていません。 Delphiにはfortranのような数字のカラムを指定するようなフォーマットの調整などできるのでしょうか。よろしくお願いします。 この質問は、C言語について以前質問したものですQNo.3590702。 Delphiではどうなるかと思って質問いたしました。

  • C言語の配列のコピーについて質問です。

    intを要素とする二つの配列a、bとその配列の要素数を受け取り、配列aのすべての要素の値を配列bにコピーする関数を定義し、その関数の機能を確認するプログラム作成するという問題について質問です。 (1)配列aを配列bに「先頭から順番に」コピーする関数を作成する (2)配列aを配列bに「後ろから順番に」コピーする関数を作成する ただし、配列の要素数(例では4)が変更されても処理できる関数を作成したいです。また、配列の要素の値は関数main()内で表示したいです。 [ヒント] (1)関数宣言の例 void array_copy(コピー元の配列, コピー先の配列, 配列の要素数) [実行結果の例] (1)先頭から順番にコピーする コピー前 a[0]: 1 b[0]: 0 a[1]: 2 b[1]: 0 a[2]: 3 b[2]: 0 a[3]: 4 b[3]: 0 コピー後 a[0]: 1 b[0]: 1 a[1]: 2 b[1]: 2 a[2]: 3 b[2]: 3 a[3]: 4 b[3]: 4 (2)後ろから順番にコピーする コピー前 a[0]: 1 b[0]: 0 a[1]: 2 b[1]: 0 a[2]: 3 b[2]: 0 a[3]: 4 b[3]: 0 コピー後 a[0]: 1 b[0]: 4 a[1]: 2 b[1]: 3 a[2]: 3 b[2]: 2 a[3]: 4 b[3]: 1 #include <stdio.h> void array_copy() から始めて int main(void) { とプログラムを作成したいのですが教えてください。

  • 配列生成される限り、ループしたい

    function arrayxml (){ urlで取得したXMLから、配列を取得 return $hairetu; //戻り値は多次元配列 } $data = arrayxml(); $cnt = count($data); do { for ($i=0; $i < $cnt; $i++) { $data = arrayxml($data[$i][0]); } } while (count($data) > 0); //関数によって配列が作られる限り このスクリプトではループはうまくされません。 $data = arrayxml($data[$i][0]);を--->arrayxml($data[$i][0]);にすると $cnt分ループされますが、do~whileのループはなされません。 関数で配列が生成される限り、do~whileループをさせたいのですが正しい方法を教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 配列のコピーと nativeMethod について

    こんばんは。 配列のコピーと nativeMethod について教えてください。 配列のコピーをするのに、Systemクラスのarraycopyを使うとします。 その場合、arraycopy を見てみると、nativeMethodになっていました。 (1) arraycopyを使うより、配列のコピーは自分でループをまわして、コピー する方が処理的に早いとか、あるんでしょうか? (2) まだまだ、nativeMethodについて、理解が浅いのですが、要するに他言語で 書かれているものを使用していると言う考え方で良いでしょうか? (3) 配列のコピーを行う場合、arraycopy を使うのが良いでしょうか? それとも、別の方法を使用されていますでしょうか? 上記、3点について教えていただけたら嬉しいと思います。 1,3の質問が少し似ているかと思いますが,宜しくお願い致します。

    • ベストアンサー
    • Java
  • 連想配列をソートしたモノを一番上を取り出す。

    連想配列をソートしたモノの一番上の値を取り出す方法ってありますか? ループさせて、一番最初の出力を取り出すしかないのでしょうか? hairetu[0] みたいな方法ってありますか?

    • ベストアンサー
    • PHP
  • 配列について

    Delphiでファイル(下のような感じ)を読み取って 配列に代入するのはできるのでしょうか? 「1,1,1,0,1,2,3,4,5,6,7,8,1 1,2,5,4,3,2,1,a,0,0,0,5,7 ...」 とこのような感じのファイルです。 例えば ShowMessage(...[1][7]); で、「a」が出るような感じです。 ファイルから読み取ったならこつこつ一個一個変数に 代入するしかないのでしょうか? それともループを使って一気にできるのでしょうか?

  • 配列のことでなのですが

    配列で先頭から順番に文字列を格納していきたいのですがどのような方法があるでしょうか? ただforループなどで順番に繰り返すのではなくて、文字列を入力する度に配列の最後尾に文字列を格納していきたいのですが、 例えば for(i=0;i<=10;i++){ scanf("%s",hairetu[i]) } のような方法ではなく配列の中に文字列を前から順番に格納したいです。 詳しい方は知識をかしていただけるとありがたいです。

  • Delphiによるファイルのコピー

    初歩的な質問で恐縮です。 「Delphi6」というツールを友人にすすめられ使いはじめました。 そもそもプログラムの知識などないのですが(VBAを少しやった程度です)、 いきなりは無謀でしょうか? それはともかく、目的はハードディスクにある特定のファイルをMOなどにコピーするだけです。コピーするファイルは常に同じです。イメージとしてはアイコンをクリックするだけでコピーし、コピー終了後に「コピーが終了しました」みたいなメッセージを表示するだけです。 ドライブにディスクが装着されていないなどのエラー処理も必要でしょうが、 とりあえずコピーができればOKです。 Helpをみると「CopyFile」という関数を使えばよさそうなのですが、文法がわかりません。どなたかお分かりの方お教えください(初歩的な質問でごめんなさい)。

  • javascriptにおける配列のコピー

    javascriptにおける配列のコピーについて質問です。 調べてみると、配列のコピーは破壊・非破壊の区別が あるのまでは理解しました。 非破壊のコピーをしたいので、 Array.prototype.clone = function(){ return Array.apply(null,this) } を用意して、3次元配列をコピーしたのですが、 コピーした配列のデータを変えたりしたら、 元の配列も変わって(破壊的)ました。。 このclone関数は多次元では破壊的になってしまうのですか? ちなみに、aaa[0~10][0~10][0~10]として、 var bbb; bbb = aaa.clone();で行いました。 教えてください、お願いします!

専門家に質問してみよう