CAPLでユーザー定義関数パラメーターとして文字列を渡すにはどうすればよいですか?

デーモンペインター

ドキュメントによると、CAPLでは、ユーザー定義関数の入力パラメーターとして文字列を渡すことはできません(CAPLの概要»関数パラメーターのデータ型を参照)。

私は、読み取り方向と書き込み方向の両方でファイル処理を行っています。ファイル名を入力パラメーターとして受け入れる関数を使用するようにコードをリファクタリングしたいと思います。

グローバル変数の使用、システム/環境変数の使用などの明らかな回避策とは別に、他の代替手段の可能性に興味があります。

どうやってやるの?


編集

CAPLは文字列型を提供しません。Cのように、これらは文字の「単なる」配列です。

私が言及したヘルプページでは、パラメータ関数として単一のchar渡すことはできますがchar []配列を渡すことはできません

当然のことながら、ミスター。Spillerは、このコードが機能することを指摘しています。

on start
{
    function("a string");
}

void function(char string[])
{
    write ("my string is %s", string);
}

および出力:

CAPL /.NET私の文字列は文字列です

しかし、それは私には連想配列のように見えます。

たとえば、これもコンパイルされます。

void function(int number[], char string[])
{
    // do stuff
}

しかし、何が起こっているのかを理解することは、これがコンパイルされないため、突然より困難になります。

on start
{
    function(13, "a string");
}

void function(int number[], char string[])
{
    write ("my number is %d", number);
    write ("my string is %s", string);
}

エラー:パラメータのタイプが一致しません。

最終的に:

variables
{
    int associativeArray[ float ];
}

on start
{
    associativeArray[1] = 3;
    function(associativeArray, "a string");
}

void function(int number[float], char string[])
{
    for (float aKey: number)
    {
        write ("my number is %d(%f)", number[aKey], aKey);
    }
}

CAPL / .NET私の番号は3(1.000000)です

意図したとおりに機能しますが、このシナリオで連想配列を使用する際の注意点(たとえば、同じ構文で文字列を反復処理する方法がわかりません)とその方法がわかりません。もしそうなら、あなたはそれらに対処しますか?

M.プレーヤー

あなたが言及しているヘルプページはまた、次のようなものの下にさらに述べています

および前述のデータ型のマトリックス(正確な表現を思い出せず、現在CANoeにアクセスできません)。

char[]int[]などは連想配列ではなく配列です。それらを連想配列と考えるかもしれませんが、キーは正の整数のみである可能性があります。

あなたが言うように、CAPLとCは同じ方法で、つまり文字の配列として文字列を処理します。したがって、次のような定義を使用して元の質問に戻る

void func(char param[])

文字列(単なる文字の配列)を関数に渡したい場合に使用する方法です。


この:

on start
{
    function(13, "a string");
}

void function(int number[], char string[])
{
    write ("my number is %d", number);
    write ("my string is %s", string);
}

13整数の配列ではなく、単一の整数であるため、コンパイルされませんしたがって、コンパイラは、型が一致しないと言います。

これは機能します:

on start
{
  int i[1];
  i[0] = 13;
  function(i, "a string");
}

同じように、次のコードもコンパイルされません。

void function(char string[])
{
   ...
}

on start
{
  function('a');
}

'a' (一重引用符に注意してください)は単一の文字であり、文字の配列がないため、署名が一致しません。


[]演算子(Cと同じ)を使用するだけで、文字列の個々の文字を取得できます

char s[] = "abcde"; char c = s[2];

'c'をに格納します s

それがそれを説明することを願っています。詳細については、お気軽にお問い合わせください。(私は頭のてっぺんからこれをすべて入力したので、マイナーな構文エラーを許してください)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ユーザー定義型変数をパラメーターとして関数に渡すにはどうすればよいですか?

分類Dev

ユーザー定義関数のパラメーターとしてリストを渡すにはどうすればよいですか?

分類Dev

AWS redshiftユーザー定義関数に文字列を渡すにはどうすればよいですか?

分類Dev

Pythonで関数パラメーターとして:を渡すにはどうすればよいですか?

分類Dev

Javaで関数をパラメータとして渡すにはどうすればよいですか?

分類Dev

Pythonのユーザー定義関数に「位置のみのパラメーター」を実装するにはどうすればよいですか?

分類Dev

<forcedType>タグを使用して生成されたユーザー定義のPL / pgSQL関数のjOOQでINPUTパラメーターの適切な値の型を生成することを修正するにはどうすればよいですか?

分類Dev

関数(独自のパラメーターを持つ)を関数のパラメーターとして渡すにはどうすればよいですか?

分類Dev

関数パラメーターを関数またはnullとして定義するにはどうすればよいですか?

分類Dev

Swift3-コールバック関数をパラメーターとして定義するにはどうすればよいですか

分類Dev

パラメータをパラメータとして持つ関数をPythonの別の関数に渡すにはどうすればよいですか?

分類Dev

ユーザー定義関数をPythonのユーザー入力として使用するにはどうすればよいですか?

分類Dev

配列またはリストをパラメーターとしてPowerShell関数に渡すにはどうすればよいですか?

分類Dev

'lambda'キーワードなしでメソッドを関数パラメーターとして渡すにはどうすればよいですか?

分類Dev

関数パラメーターとして一致する列挙型バリアントを渡すにはどうすればよいですか?

分類Dev

パラメータとして渡された関数のパラメータタイプを検出するにはどうすればよいですか?

分類Dev

Excelのユーザー定義関数(UDF)で文字列型と範囲型の引数を受け入れるにはどうすればよいですか?

分類Dev

Rustでは、発散関数をパラメーターとして別の関数に渡すにはどうすればよいですか?

分類Dev

制限をパラメータとして定義するにはどうすればよいですか?

分類Dev

ユーザー定義関数内の配列を削除するにはどうすればよいですか?

分類Dev

変数を使用して関数を呼び出し、それをパラメーターとして渡すにはどうすればよいですか?Jquery

分類Dev

配列内の関数にパラメーターを渡すにはどうすればよいですか?

分類Dev

キーワード引数をパラメーターとして関数に渡すにはどうすればよいですか?

分類Dev

jqueryの.ajax()関数のデータ文字列パラメーターを正しく渡すにはどうすればよいですか?

分類Dev

関数でパラメータを定義するにはどうすればよいですか。

分類Dev

配列をパラメータとしてJavaグラフィック関数に渡すにはどうすればよいですか?

分類Dev

オブジェクト属性を関数パラメーターとしてラムダ関数に渡すにはどうすればよいですか?

分類Dev

Cマクロ関数でパラメーターを適切に定義して使用するにはどうすればよいですか?

分類Dev

ユーザー定義関数をPerlの組み込み関数として追加するにはどうすればよいですか?

Related 関連記事

  1. 1

    ユーザー定義型変数をパラメーターとして関数に渡すにはどうすればよいですか?

  2. 2

    ユーザー定義関数のパラメーターとしてリストを渡すにはどうすればよいですか?

  3. 3

    AWS redshiftユーザー定義関数に文字列を渡すにはどうすればよいですか?

  4. 4

    Pythonで関数パラメーターとして:を渡すにはどうすればよいですか?

  5. 5

    Javaで関数をパラメータとして渡すにはどうすればよいですか?

  6. 6

    Pythonのユーザー定義関数に「位置のみのパラメーター」を実装するにはどうすればよいですか?

  7. 7

    <forcedType>タグを使用して生成されたユーザー定義のPL / pgSQL関数のjOOQでINPUTパラメーターの適切な値の型を生成することを修正するにはどうすればよいですか?

  8. 8

    関数(独自のパラメーターを持つ)を関数のパラメーターとして渡すにはどうすればよいですか?

  9. 9

    関数パラメーターを関数またはnullとして定義するにはどうすればよいですか?

  10. 10

    Swift3-コールバック関数をパラメーターとして定義するにはどうすればよいですか

  11. 11

    パラメータをパラメータとして持つ関数をPythonの別の関数に渡すにはどうすればよいですか?

  12. 12

    ユーザー定義関数をPythonのユーザー入力として使用するにはどうすればよいですか?

  13. 13

    配列またはリストをパラメーターとしてPowerShell関数に渡すにはどうすればよいですか?

  14. 14

    'lambda'キーワードなしでメソッドを関数パラメーターとして渡すにはどうすればよいですか?

  15. 15

    関数パラメーターとして一致する列挙型バリアントを渡すにはどうすればよいですか?

  16. 16

    パラメータとして渡された関数のパラメータタイプを検出するにはどうすればよいですか?

  17. 17

    Excelのユーザー定義関数(UDF)で文字列型と範囲型の引数を受け入れるにはどうすればよいですか?

  18. 18

    Rustでは、発散関数をパラメーターとして別の関数に渡すにはどうすればよいですか?

  19. 19

    制限をパラメータとして定義するにはどうすればよいですか?

  20. 20

    ユーザー定義関数内の配列を削除するにはどうすればよいですか?

  21. 21

    変数を使用して関数を呼び出し、それをパラメーターとして渡すにはどうすればよいですか?Jquery

  22. 22

    配列内の関数にパラメーターを渡すにはどうすればよいですか?

  23. 23

    キーワード引数をパラメーターとして関数に渡すにはどうすればよいですか?

  24. 24

    jqueryの.ajax()関数のデータ文字列パラメーターを正しく渡すにはどうすればよいですか?

  25. 25

    関数でパラメータを定義するにはどうすればよいですか。

  26. 26

    配列をパラメータとしてJavaグラフィック関数に渡すにはどうすればよいですか?

  27. 27

    オブジェクト属性を関数パラメーターとしてラムダ関数に渡すにはどうすればよいですか?

  28. 28

    Cマクロ関数でパラメーターを適切に定義して使用するにはどうすればよいですか?

  29. 29

    ユーザー定義関数をPerlの組み込み関数として追加するにはどうすればよいですか?

ホットタグ

アーカイブ