ドキュメントによると、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)です
意図したとおりに機能しますが、このシナリオで連想配列を使用する際の注意点(たとえば、同じ構文で文字列を反復処理する方法がわかりません)とその方法がわかりません。もしそうなら、あなたはそれらに対処しますか?
あなたが言及しているヘルプページはまた、次のようなものの下にさらに述べています
および前述のデータ型のマトリックス(正確な表現を思い出せず、現在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]
コメントを追加