Difference between revisions of "EN/Documentation/BASIC Guide/Conversion Functions (Runtime Library)"

From Apache OpenOffice Wiki
Jump to: navigation, search
(New page: {{DISPLAYTITLE:変換関数 ({{OOo}} 実行時ライブラリ) }} {{EN/Documentation/BASICGuideTOC/v2 |ShowPrevNext=block |ShowPrevPage=block |PrevPage=Documentation/BASIC Guide/Runtime L...)
 
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
{{DISPLAYTITLE:変換関数 ({{OOo}}  
+
{{DISPLAYTITLE:Funzioni di conversione ({{OOo}} libreria runtime)}}
実行時ライブラリ) }}
+
 
{{EN/Documentation/BASICGuideTOC/v2
 
{{EN/Documentation/BASICGuideTOC/v2
 
|ShowPrevNext=block
 
|ShowPrevNext=block
Line 9: Line 8:
 
}}
 
}}
 
   
 
   
プログラムを\'8d\'5c築する場合、ある変数の変数型を他の種類に変換する必要がよくあります。
+
In molte situazioni, si verificano circostanze in cui una variabile di un tipo deve essere modificata in una variabile di un altro tipo.
  
== 変数型の暗黙的変換と明示的変換 ==
+
== Conversioni di tipo implicito ed esplicito ==
  
変数型を変換する一番簡単な方法は、代入処理を利用することです。
+
Il modo più semplice di convertire una variabile da un tipo ad un altro è quello di utilizzare un'assegnazione.
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 23: Line 22:
 
</source>
 
</source>
  
このサンプルコードでは、変数 <tt>A</tt> は文字列型、変数 <tt>B</tt> は整数型として宣言しています。そしてこのような状況で変数 <tt>A</tt> に変数 <tt>B</tt> を代入すると、自動的に {{OOo}} Basic が変数 B の変数型を文字列型に変換します。このような変換では、見た目よりも複雑な処理が行われており、まず変数 <tt>B の整数値が、2 バイト長のデータとして作業用メモリに格納されます。</tt><tt>A</tt>一方の変数は文字列型であるので、各文字 (文字や数字) ごとに 1 または 2 バイト長のデータとしてメモリ内に格納されています。このため変数 <tt>B</tt> に変数 <tt>A</tt> を代入する際には、変数 <tt>B</tt> 側の内部フォーマットに一致するよう、変数 <tt>A</tt> のデータを変換しておく必要があります。
+
In questo esempio, la variabile <tt>A</tt> è una stringa, e la variabile <tt>B</tt> è un numero intero. {{OOo}} Basic garantisce che la variabile <tt>B</tt> sia convertita in una stringa
 +
durante l'assegnazione alla variabile <tt>A</tt>. Questa conversione è molto più elaborata di
 +
quello che sembra: il numero intero <tt>B</tt> rimane nella memoria operativa sotto forma di un numero di due byte di lunghezza. <tt>A</tt>, d'altro canto, è una stringa e il computer salva un valore di uno o due byte di lunghezza per ogni carattere (ogni numero). Pertanto, prima della copia del contenuto da <tt>B</tt> a <tt>A</tt>, <tt>B</tt> deve essere convertito nel formato interno di <tt>A</tt>.
  
他の多くのプログラミング言語とは異なり、Basic の場合、変数型の変換は自動的に実行されます。ただし、\'97\'5c想外の結果が生じることがあります。ここで、どのような問題が生じるかについて、以下のサンプルコードを使って検討をしてみます。
+
A differenza della maggior parte dei linguaggi di programmazione, Basic esegue la conversione del tipo automaticamente. Ciò può tuttavia avere conseguenze importanti. A un esame ravvicinato, la sequenza di codice seguente
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 37: Line 38:
 
</source>
 
</source>
  
一見するとこのコードに特に問題はなさそうですが、目に見えない形で落とし穴が潜んでいます。Basic インタプリタは、最初に加算演算を行なってから、その結果を文字列変数に代入するので、ここで得られる結果は 2 という文字列になります。
+
che a prima vista sembra corretta, può dare origine a errori. L'interprete Basic calcola prima il risultato del processo di addizione, quindi lo converte in una stringa che, come risultato, produce la stringa 2.
  
逆に、Basic インタプリタが、最初に変数 <tt>B</tt> と変数 <tt>C</tt> の値を文字列に変換し、その結果に対してプラス記号による演算を適用するのであれば、得られる結果は <tt>11</tt> という文字列になります。
+
Se, d'altro canto, l'interprete Basic convertisse per prima cosa i valori iniziali <tt>B</tt> e <tt>C</tt> in
 +
una stringa e applicasse l'operatore più al risultato, questo produrrebbe la stringa <tt>11</tt>.
  
同様の問題は、バリアント型変数を使用する際にも生じます。
+
Lo stesso accade quando si utilizzano le variabili di tipo variante:
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 53: Line 55:
 
</source>
 
</source>
  
バリアント型変数には数値と文字列の両方のデータを格納できるため、この変数 <tt>A</tt> に代入されるのが数値 2 なのか文字列 11 なのかは不明です。
+
Poiché le variabili di tipo variante possono contenere sia numeri che stringhe, non è chiaro se alla variabile <tt>A</tt> viene assegnato il numero 2 o la stringa 11.
  
▼このような変数型の暗黙的変換に起因するエラーを回避するには、プログラム内にバリアント型変数を使用しないなど、このような点に注意してプログラミングを行う必要があります。
+
Le occasioni di errore qui indicate per le conversioni di tipo implicito possono essere evitate solo programmando con attenzione, ad esempio evitando l'utilizzo del tipo di dati
 +
variante.
  
変数型の暗黙的変換に起因するエラーを防止する観点から、{{OOo}} Basic には各種の変換関数が用意されており、様々なデータ型に対する変換操作を行えるようになっています。
+
Per evitare altri errori risultanti dalle conversioni di tipo implicito, {{OOo}} Basic offre una serie di funzioni di conversione, utilizzabili per definire quando il tipo di dati di un'operazione dovrebbe essere convertito:
  
;<tt>CStr(Var)</tt>: 任意の型のデータを文字列に変換します。
+
;<tt>CStr(Var)</tt>:Converte qualsiasi tipo di dati in una stringa.
;<tt>CInt(Var)</tt>: 任意の型のデータを整数値に変換します。
+
;<tt>CInt(Var)</tt>:Converte qualsiasi tipo di dati in un valore intero.
;<tt>CLng(Var)</tt>: 任意の型のデータをロング整数値に変換します。
+
;<tt>CLng(Var)</tt>:Converte qualsiasi tipo di dati in un valore intero lungo.
;<tt>CSng(Var) </tt>: 任意の型のデータを単精度値に変換します。
+
;<tt>CSng(Var) </tt>:Converte qualsiasi tipo di dati in un valore singolo.
;<tt>CDbl(Var)</tt>: 任意の型のデータを倍精度値に変換します。
+
;<tt>CDbl(Var)</tt>:Converte qualsiasi tipo di dati in un valore doppio.
;<tt>CBool(Var)</tt>: 任意の型のデータをブール値に変換します。
+
;<tt>CBool(Var)</tt>:Converte qualsiasi tipo di dati in un valore booleano.
;<tt>CDate(Var)</tt>: 任意の型のデータを日付データに変換します。
+
;<tt>CDate(Var)</tt>:Converte qualsiasi tipo di dati in un valore di data.
  
これらの変換関数を使用することで、{{OOo}} Basic による型変換を明示的に実施することができます。
+
Potete utilizzare queste funzioni di conversione per definire il modo in cui {{OOo}} Basic eseguirà le operazioni di conversione di tipo:
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 82: Line 85:
 
</source>
 
</source>
  
このサンプルコードの最初の変換操作では、{{OOo}} Basic に整数値の加算を行わせてから、その結果を文字列に変換しています。変数 <tt>A</tt> に代入される値は、文字列の <tt>2</tt> となります。2 番目の変換操作では、整数変数の値を文字列に変換してから、代入時に結合処理を行なっています。変数 <tt>A</tt> に代入される値は、文字列の <tt>11</tt> となります。
+
Durante la prima addizione dell'esempio, {{OOo}} Basic aggiunge prima le variabili
 +
intere e quindi converte il risultato in una catena di caratteri. Ad <tt>A</tt> è assegnata la stringa <tt>2</tt>. Nel secondo esempio, le variabili intere vengono prima convertite in due stringhe e quindi collegate reciprocamente tramite l'assegnazione. Ad <tt>A</tt> è pertanto assegnata la stringa <tt>11</tt>.
  
数値変換用の <tt>CSng</tt> および <tt>CDbl</tt> 関数は、小数を扱うこともできます。ただしこの場合の小数点には、各地域ごとの各ロケール設定で指定されている小数点記号を使用する必要があります。また逆に、<tt>CStr</tt> メ\'83\'5cッドで数値、日付、時刻のデータを変換する際には、各ロケール設定による書式が適用されます。
+
Le funzioni di conversione numerica <tt>CSng</tt> e <tt>CDbl</tt> accettano inoltre i numeri decimali. Il simbolo definito nelle impostazioni specifiche del paese corrispondente deve essere utilizzato come simbolo del separatore decimale. Al contrario, i metodi <tt>CStr</tt> utilizzano le impostazioni specifiche del paese attualmente selezionate per la formattazioni di numeri, date e ora.
  
<tt>Val</tt> 関数は、<tt>Csng, Cdbl</tt> メソッドおよび <tt>Cstr</tt> メソッドとは使用法が少し異なります。この関数は文字列を数値に変換しますが、小数点として使える記号はピリオドに固定されています。
+
La funzione <tt>Val</tt> è diversa dai metodi <tt>Csng, Cdbl</tt> e <tt>Cstr</tt>. Essa converte una stringa in un numero, ma prevede sempre l'utilizzo di un punto come simbolo del punto decimale.
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 97: Line 101:
 
</source>
 
</source>
  
== 変数の内容の確認 ==
+
==Controllo del contenuto delle variabili==
  
場合によってはデータの変換ができないことがあります。
+
In alcuni casi, non è possibile convertire la data:
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 109: Line 113:
 
</source>
 
</source>
  
このサンプルコードからも分かるように、日付変数に <tt>test</tt> という文字列は代入できないので、このような場合 Basic インタプリタはエラーメッセージを表示します。同様のことは、ブール型変数に文字列を代入するような場合にも当てはまります。
+
Nell'esempio illustrato, l'assegnazione della stringa <tt>test</tt> a una variabile data non ha senso, pertanto l'interprete Basic restituisce un errore. Lo stesso si verifica quando si cerca di assegnare una stringa a una variabile booleana:
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 119: Line 123:
 
</source>
 
</source>
  
上記のサンプルコードでも、Basic インタプリタはエラーメッセージを\'95\'5c示します。
+
Anche in questo caso, l'interprete Basic restituisce un errore.
  
このようなエラーは、代入を行う前のプログラム行で、代入させるデータ型が変数型と一致するかをチェックさせることで回避できます。{{OOo}} Basic にはこのような処理を行うために、以下のテスト関数が用意されています。
+
Questi messaggi di errore possono essere evitati controllando il programma prima di un'assegnazione, al fine di stabilire se il contenuto della variabile da assegnare corrisponde al tipo della variabile di destinazione. {{OOo}} Basic fornisce le seguenti funzioni di prova a tal fine:
  
;<tt>IsNumeric(Value)</tt>: Value の値が数値であるかチェックします。
+
;<tt>IsNumeric(Value)</tt>:Controlla se un valore è un numero.
;<tt>IsDate(Value)</tt>: Value の値が日付であるかチェックします。
+
;<tt>IsDate(Value)</tt>:Controlla se un valore è un numero.
;<tt>IsArray(Value)</tt>: Value の値が配列であるかチェックします。
+
;<tt>IsArray(Value)</tt>:Controlla se un valore è una matrice.
  
これらの関数は、ユーザーの入力値を受け取る際に有用です。たとえば数値や日付などの、想定される形式のデータをユーザーが入力したかをチェックできます。
+
Queste funzioni sono particolarmente utili quando si richiede l'immissione di valori da parte dell'utente. Ad esempio, è possibile controllare se un utente ha immesso un numero o una data validi.
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 138: Line 142:
 
</source>
 
</source>
  
上記のサンプルコードでは、変数 <tt>UserInput</tt> の値が数値であれば、その値を変数 <tt>ValidInput</tt> に代入しています。変数 <tt>UserInput</tt> の値が数値でなければ、変数 <tt>ValidInput</tt> には <tt>0 を代入して、エラーメッセージを\'95\'5c示します。</tt>
+
Nell'esempio precedente, se la variabile <tt>UserInput</tt> contiene un valore numerico valido, quest'ultimo viene assegnato alla variabile <tt>ValidInput</tt>. Se <tt>UserInput</tt> non contiene un numero valido, a <tt>ValidInput</tt> viene assegnato il valore <tt>0</tt> e viene restituito un messaggio di errore.
  
{{OOo}} Basic の組み込み関数には、このような数値、日付、配列に対するテスト関数は用意されていますが、ブール値に対するテスト関数は用意されていません。このようなチェック機\'94\'5cが必要であれば、以下の関数 <tt>IsBoolean</tt> のような関数を記述することで実装できます。
+
Sebbene in {{OOo}} esistano funzioni di prova per il controllo dei numeri, delle date e delle matrici, non esiste una funzione corrispondente per il controllo dei valori booleani. La funzionalità può tuttavia essere simulata utilizzando la funzione <tt>IsBoolean</tt>:
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 157: Line 161:
 
</source>
 
</source>
  
上記の関数 <tt>IsBoolean</tt> では、ブール型の局所変数 <tt>Dummy</tt> を用意して、与えられたデータをその中に代入させています。この代入が問題なく実行できれば、関数の戻り値として <tt>True</tt> を返します。そして代入に失敗した場合は、実行時エラーが発生するので、このテスト関数の実行は中断され、エラー処理を行います。
+
La funzione <tt>IsBoolean</tt> definisce una variabile interna <tt>Dummy</tt> di tipo booleano e cerca di assegnarla al valore trasferito. Se l'assegnazione è riuscita, la funzione restituisce <tt>True</tt>. Se invece non riesce, viene prodotto un errore runtime, che intercetta la funzione di prova per restituire un errore.
  
{{Documentation/Note|{{OOo}} Basic の文字列に含まれている数値以外の値が数字に割り当てられていると、{{OOo}} Basic はエラーメッセージを表示せず、最初の無効な文字で文字列の変換を停止します。VBA の場合は、これとは異なる処理が行われます。VBA でこのような代入を行おうとすると、エラーが発生し、処理が中断されます。}}
+
{{Note|Se una stringa in {{OOo}} Basic contiene un valore non numerico e se questo viene assegnato a un numero, {{OOo}} Basic non produce un messaggio di errore, ma interrompe la conversione della stringa in corrispondenza del primo carattere non valido. Questa procedura è differente da quanto accade
 +
in VBA. In VBA, se viene eseguita l'assegnazione descritta, viene prodotto un errore e
 +
il programma termina.}}
  
 
{{PDL1}}
 
{{PDL1}}
 
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Conversion Functions (Runtime Library)}}
 
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Conversion Functions (Runtime Library)}}

Latest revision as of 14:43, 6 July 2018

Template:EN/Documentation/BASICGuideTOC/v2

In molte situazioni, si verificano circostanze in cui una variabile di un tipo deve essere modificata in una variabile di un altro tipo.

Conversioni di tipo implicito ed esplicito

Il modo più semplice di convertire una variabile da un tipo ad un altro è quello di utilizzare un'assegnazione.

Dim A As String
Dim B As Integer
 
B = 101 
A = B

In questo esempio, la variabile A è una stringa, e la variabile B è un numero intero. Apache OpenOffice Basic garantisce che la variabile B sia convertita in una stringa durante l'assegnazione alla variabile A. Questa conversione è molto più elaborata di quello che sembra: il numero intero B rimane nella memoria operativa sotto forma di un numero di due byte di lunghezza. A, d'altro canto, è una stringa e il computer salva un valore di uno o due byte di lunghezza per ogni carattere (ogni numero). Pertanto, prima della copia del contenuto da B a A, B deve essere convertito nel formato interno di A.

A differenza della maggior parte dei linguaggi di programmazione, Basic esegue la conversione del tipo automaticamente. Ciò può tuttavia avere conseguenze importanti. A un esame ravvicinato, la sequenza di codice seguente

Dim A As String
Dim B As Integer
Dim C As Integer
 
B = 1 
C = 1
A = B + C

che a prima vista sembra corretta, può dare origine a errori. L'interprete Basic calcola prima il risultato del processo di addizione, quindi lo converte in una stringa che, come risultato, produce la stringa 2.

Se, d'altro canto, l'interprete Basic convertisse per prima cosa i valori iniziali B e C in una stringa e applicasse l'operatore più al risultato, questo produrrebbe la stringa 11.

Lo stesso accade quando si utilizzano le variabili di tipo variante:

Dim A 
Dim B 
Dim C 
 
B = 1 
C = "1"
A = B + C

Poiché le variabili di tipo variante possono contenere sia numeri che stringhe, non è chiaro se alla variabile A viene assegnato il numero 2 o la stringa 11.

Le occasioni di errore qui indicate per le conversioni di tipo implicito possono essere evitate solo programmando con attenzione, ad esempio evitando l'utilizzo del tipo di dati variante.

Per evitare altri errori risultanti dalle conversioni di tipo implicito, Apache OpenOffice Basic offre una serie di funzioni di conversione, utilizzabili per definire quando il tipo di dati di un'operazione dovrebbe essere convertito:

CStr(Var)
Converte qualsiasi tipo di dati in una stringa.
CInt(Var)
Converte qualsiasi tipo di dati in un valore intero.
CLng(Var)
Converte qualsiasi tipo di dati in un valore intero lungo.
CSng(Var)
Converte qualsiasi tipo di dati in un valore singolo.
CDbl(Var)
Converte qualsiasi tipo di dati in un valore doppio.
CBool(Var)
Converte qualsiasi tipo di dati in un valore booleano.
CDate(Var)
Converte qualsiasi tipo di dati in un valore di data.

Potete utilizzare queste funzioni di conversione per definire il modo in cui Apache OpenOffice Basic eseguirà le operazioni di conversione di tipo:

Dim A As String
Dim B As Integer
Dim C As Integer
 
B = 1 
C = 1
A = CStr(B + C)         ' B and C are added together first, then
                        ' converted to the string "2"
A = CStr(B) + CStr(C)   ' B and C are converted into a string,then
                        ' combined to produce the string "11"

Durante la prima addizione dell'esempio, Apache OpenOffice Basic aggiunge prima le variabili intere e quindi converte il risultato in una catena di caratteri. Ad A è assegnata la stringa 2. Nel secondo esempio, le variabili intere vengono prima convertite in due stringhe e quindi collegate reciprocamente tramite l'assegnazione. Ad A è pertanto assegnata la stringa 11.

Le funzioni di conversione numerica CSng e CDbl accettano inoltre i numeri decimali. Il simbolo definito nelle impostazioni specifiche del paese corrispondente deve essere utilizzato come simbolo del separatore decimale. Al contrario, i metodi CStr utilizzano le impostazioni specifiche del paese attualmente selezionate per la formattazioni di numeri, date e ora.

La funzione Val è diversa dai metodi Csng, Cdbl e Cstr. Essa converte una stringa in un numero, ma prevede sempre l'utilizzo di un punto come simbolo del punto decimale.

Dim A As String
Dim B As Double
 
A = "2.22"
B = Val(A)      ' Is converted correctly regardless of the
                ' country-specific settings

Controllo del contenuto delle variabili

In alcuni casi, non è possibile convertire la data:

Dim A As String
Dim B As Date
 
A = "test"
B = A            ' Creates error message

Nell'esempio illustrato, l'assegnazione della stringa test a una variabile data non ha senso, pertanto l'interprete Basic restituisce un errore. Lo stesso si verifica quando si cerca di assegnare una stringa a una variabile booleana:

Dim A As String
Dim B As Boolean
 
A = "test"
B = A            ' Creates error message

Anche in questo caso, l'interprete Basic restituisce un errore.

Questi messaggi di errore possono essere evitati controllando il programma prima di un'assegnazione, al fine di stabilire se il contenuto della variabile da assegnare corrisponde al tipo della variabile di destinazione. Apache OpenOffice Basic fornisce le seguenti funzioni di prova a tal fine:

IsNumeric(Value)
Controlla se un valore è un numero.
IsDate(Value)
Controlla se un valore è un numero.
IsArray(Value)
Controlla se un valore è una matrice.

Queste funzioni sono particolarmente utili quando si richiede l'immissione di valori da parte dell'utente. Ad esempio, è possibile controllare se un utente ha immesso un numero o una data validi.

If IsNumeric(UserInput) Then
  ValidInput = UserInput
Else
  ValidInput = 0
  MsgBox "Error message."
End If

Nell'esempio precedente, se la variabile UserInput contiene un valore numerico valido, quest'ultimo viene assegnato alla variabile ValidInput. Se UserInput non contiene un numero valido, a ValidInput viene assegnato il valore 0 e viene restituito un messaggio di errore.

Sebbene in Apache OpenOffice esistano funzioni di prova per il controllo dei numeri, delle date e delle matrici, non esiste una funzione corrispondente per il controllo dei valori booleani. La funzionalità può tuttavia essere simulata utilizzando la funzione IsBoolean:

Function IsBoolean(Value As Variant) As Boolean
  On Error Goto ErrorIsBoolean:
  Dim Dummy As Boolean
  Dummy = Value
  IsBoolean = True
  On Error Goto 0
  Exit Sub
 
  ErrorIsBoolean:
  IsBoolean = False
  On Error Goto 0
End Function

La funzione IsBoolean definisce una variabile interna Dummy di tipo booleano e cerca di assegnarla al valore trasferito. Se l'assegnazione è riuscita, la funzione restituisce True. Se invece non riesce, viene prodotto un errore runtime, che intercetta la funzione di prova per restituire un errore.

Documentation note.png Se una stringa in Apache OpenOffice Basic contiene un valore non numerico e se questo viene assegnato a un numero, Apache OpenOffice Basic non produce un messaggio di errore, ma interrompe la conversione della stringa in corrispondenza del primo carattere non valido. Questa procedura è differente da quanto accade

in VBA. In VBA, se viene eseguita l'assegnazione descritta, viene prodotto un errore e il programma termina.

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools