約 441,988 件
https://w.atwiki.jp/imops-forth/pages/26.html
序 固定文字列は、内容が固定された文字の系列をデータとして利用するものである。内容も長さも後から変えられることは無いという前提であるから、大抵は、大域データ域にその長さ分のメモリー領域を確保して書き込んでおく。Forthではデータディクショナリーである。 全体としては変化する文字列の、変化しない部分を、固定文字列にしておくという使用法もある。 Forthで固定した文字列を扱う方法は、引用符でリテラル(文字通り)に書き込むやり方と、ワードとして文字列定項を定義するやり方がある。 他方、挿入したり切除したりできる可変的文字列を扱う仕組みは、ほとんどforth標準には入っていない。それぞれの環境ごとに様々な方法が実装されていて、統一できないのである。確かにforth標準中にも文字列に関するワードはオプションとしていくつか規定されているが、あまり便利なものではない。 例えばMopsでは、オブジェクト指向の機構を利用してヒープベースの文字列クラスが定義されている。 このような状況であるため、ここでは固定文字列についてのみ説明することとする。ちなみに、文字列は英語ではキャラクター ストリング(Character String)であり、略してストリング(String)と呼ぶことが多い。 リテラル S" ワード定義内に文字列を埋め込む方法は、ワード S" で文字列を開始することである。文字列の終わりを記すのは、二重引用符 "である。この対はコンパイル状態で使用することが想定されているので、コロン定義の外に書いても動作は保証されない。 string-word S" This is a constant string." [コード] ; まず、S"はワードであるので、その後にはひとつ空白が必要である。その空白は文字列には算入されない。二番目からの空白は文字列に入る。終わりの " は、ワードではなく区切り文字である。したがって、空白なしに付けてよい。空白があると、それも文字列に追加される。 Mopsでは、S" の短縮形として" というワードも定義されている。つまりSを書かなくてもよいわけである。多くの環境で同じものがあるようである。 Forthの文字列は、スタック上では2つの数値で表現される。先に文字列が格納されているデータ域のアドレス、トップに文字列のバイト長である。addr lenストリングなどといわれることもある。長さが確定値としてあると、何かと便利である。 環境によっては、日本語の文字列は扱えない可能がある。Mopsでは、PowerMopsまではShift-JISに近いMac-Japaneseが利用でき、 iMopsからはUTF-8になったが、一貫して日本語も問題なく使えてきた。gforthもUTF-8対応しているらしい。商用のものは多分大丈夫だろう。 ただし、固定文字列の最長限度は環境によって異なる。Mopsでは255バイトまでである。これは1バイト数限度ということだが、多くの環境で同じ制限のようである。実際上はこれだけ長い文字列は滅多にない。ただ、この制限がバイト数であることに注意が必要である。UTF-8で動作している場合、日本語文字は2バイト以上あるので、127文字以下しか入らない。 Mopsでは、Stringオブジェクトを用いれば、制限は形式上2~4GB(実際上メモリー上限)まで拡大される。長い文字列は文字列オブジェクトにすればよいわけである。 このワードは、二重引用符 " を特殊文字として扱うので、文字列の本体が二重引用符を含むことができない。また、改行を含むこともできない。そこで、次のようなエスケープ文字を含む文字列を扱う機構がある。 エスケープ S"の代わりにS\"を用いれば、バックスラッシュ記号を用いて特殊記号をエスケープ文字として文字列に挿入することができる。例えば、 esc-string S\" This string can contain \" or line breaking\rlike that." [コード] ; のように書くと、\"の個所には二重引用符が、\rのところには改行が挿入された文字列がコンパイルされる。 これはforth 200xで新しく導入されたワードであり、PowerMopsには定義されていない。iMopsでは定義されている。 主なエスケープ文字を挙げておく。バックスラッシュの後の文字は、大文字小文字を区別する(case-sensitive)ので注意。 \t タブ \l LF (UNIX系での改行) \r CR(Macでの改行) \m CRLF (MSDOS, Windowsでの改行) \n newline (当環境での改行) \z ヌル($00) \" or \q (二重引用符) \\ (バックスラッシュ自体) バックスラッシュ後の文字が規定外であったときの挙動は、当のforth環境に依存するとされる。iMopsでは静かに無視する。 C言語型文字列 C" OSの動的ライブラリがC言語系で書かれていることが多いため、C言語形式の0で終わる文字列が必要になる局面もでてくる。そこで、C言語型のリテラルを形成するワードC"が定義されている。使い方はS"とほぼ同じである。 C-str C" This is a C type string." [コード] ; この場合、文字列の格納場所のアドレスのみがスタックに積まれる。ライブラリ関数のパラメターとして文字列を渡す必要があるときには、このアドレスを渡せば良い。 文字列定項 Forth標準 文字列定項の方法、といっても標準のforthには特別な手段は見当たらない。普通に文字列をコロン定義で定義してしまえば良い、ということであろう。 ST1 ( -- addr len ) S" This is a colon definition that defines a string constant." ; 必要なところでST1を呼び出せば良い。 メモリー効率の点からいえば、複数の個所で引用される文字列なら、リテラルよりも文字列定項にした方が効率が良い。リテラルの場合、それを書き込む毎に文字列がデータとして格納されるので、同じ内容ならメモリースペースの無駄である。とはいえ、近年では、よほど特殊な小さい環境でもなければ、文字列程度では誤差の範囲内ともいえる。それよりも、コードにいちいち文字列を書かなくても良いという点が文字列定項の利点ということになるのだろう。 Mopsでの拡張 SCON 文字列定数といってもいい。固定文字列を定数のように宣言定義しておいて、その名前で呼び出す方法である。SCONというワードを用いる。String CONstantの略であろう。 例えば: SCON S1 ~"String Constant Declaration"~ まず、SCONと宣言し、文字列の名前(ここではS1)、そして、何か同じ文字で囲まれた文字列、である。これは宣言であるから解釈実行環境、コロン定義の外で実施しなければならない。 SCONは、文字列名の後の最初の非空白文字を区切り文字として採用し、次に出てくるその区切り文字までを文字列とする。したがって、当の文字列中に含まれない適当な文字を区切り文字として採用すれば良い。また、区切り文字と文字列の間に空白は必要ない。上の例では、S1は二重引用符を含んだ文字列になっている。そして、この文字列を必要とするところで名前S1を書けば、 some-word ... S1 \ -- addr len ... 定義として宣言された文字列のアドレスと長さがスタックに積まれることになる。コロン定義した文字列を呼び出すより効率は良い。 CString SCONと同じ構文で、C言語型の文字列を定義するワードが、CSTRINGである。 CSTRING CS1 ~"C type String Constant"~ Mopsではもともと、add lenのlen(length 長さ)を落とせば、C言語型の文字列として通用するようになっていた(多くのforth環境もそのようになっているように思われる)。しかし、MacOSXになって、外部関数へのパラメターとしてC型の文字列が必要となる場合が増えたため、多少の効率化を図って定義されたのが、このCSTRINGである。用法は、SCONの場合と全く同じである。名前を呼び出せば、アドレスだけがスタックに置かれる。 次は、ページを替えて、文字列の比較、印字する方法、続いて、1文字を扱う方法について述べる。 文字列とASCII文字の印字
https://w.atwiki.jp/abwiki/pages/130.html
文字列処理は重要です。ポインタが理解出来ているかどうかの重要な見極めにもなります。 基本 "今日は○○する気分ではない" という文字列は最後に0(ナル文字)がつきます。 ナル文字とヌルとヌルポインタの違いはその意味にあり、 ナル文字(NUL)はゼロ終端系文字列(*1)に於ける文字の終了 nullは無効な値 null pointerは無効なポインタ をそれぞれ意味します。 補足 1)ゼロ終端系でない文字列にはPASCAL文字列等があり、PASCAL文字列は処理速度に優れた特性があるため、Excel内部等で用いられている。 実際に使ってみよう Sting型に慣れている人は面倒だと思うけど、ついてきて欲しい。 1 byte型配列を使おう! #N88BASICDim mes[123] As Byte'123バイト確保lstrcpy(mes, "平井公彦")'mesに文字列をコピーlstrcat(mes," 私は彼が好きです")'mesに連結wsprintf(mes+lstrlen(mes), "%d",100)'100を文字列にして追加Print MakeStr(mes) なんということのないコードだが、配列にデータをコピーしているのであふれにように中尉。 おしりがNULなのでmes[8]=0などと直接値を代入しててもおk 2 ポインタ #N88BASICDim p As *ByteConst A="平井公彦"Const B="松嶋絵美"p=APrint MakeStr(p)p=BPrint MakeStr(p) エラーメッセージなどすでに文字列が確保されているようなときは、ポインタを使えばいい。 アドレスを渡すだけなので、バッファオーバーフローとかないし、速い。 しかし、ポインタの指した先がリテラルの場合は変更できないと思え。 Ex 文字列の先頭にExをつけると(例:Ex"asdf")エスケープ文字列が有効になります。 例えば\nが改行、\tがタブ、\qがクオートです。 昔のBASICのように"asd"+Chr$( H0D)+"qwe"でもコンパイルは通りますが、 Ex"asd\nqwe"と書いたほうが、文字が少なくて住みます…。 お好みにあわせてどうぞ。 文字、文字列の種類と変数型の注意点 文字列を扱う場合、通常は "BASIC" などとしてプログラム内ではクオーテーションで囲む。変数に代入する場合は、 Dim str1 As Stringstr1="BASIC" としてDim文で定義したString型変数に文字列を代入することが出来る。 String型は標準的なBASIC言語に準拠した文字列型で、その使い方はBASIC言語として一般性と汎用性がある。 文字列とは別に、1文字だけを扱う事も可能。英字アルファベットを表記するASCIIコードは 英字で255文字に収まる事から、数値的に255が表現できれば良いので1Byteの範囲に収まる。 Byte型変数は255までの数値表現が可能だから、Byte型の変数一つでASCII英字コード一文字を表す事が出来る。 Dim c As Bytec=97print c'数値として表示print Chr$(a)'文字として表示 このByte型を配列とすれば複数の文字を代入でき、文字列として扱う事も可能になる。 文字を扱う場合、一つの文字のByte変数とその集合であるByte型配列があり、一字以上の文字列を扱うString型がある。 普段BASICを使う場合はString型を用いる事が多い。 String型は内部でメモリーを確保して文字列を保存するので、LongやDoubleとは異なり可変長の変数型として処理 される。String型文字列のメモリーブロックはプログラムが終了すると自動的に開放される。 NULL(NUL)終端文字列 Byte文字、String型文字列とは別に、Win32APIを利用する場合にはC/C++と互換性のあるNull(NUL)文字終端の文字列を 使う。これはByte型変数の配列と等しく、異なるのは文字終端がNull(NUL,ゼロ)で終わると規定されている所。 Byte配列の文字列は標準的なBASICには無い型で多くのBASIC処理系では扱えない事が多いが、Win32APIを利用する場合には C/C++と互換性があり、Win32APIを利用する事が多いabでは多用される。 見た目はByte型文字配列と何ら変わらない。 Dim nstr(20) As Bytelstrcpy(nstr,"hello null string")'Null終端Byte配列文字列を作成print MakeStr(nstr)'文字列を表示 Null終端文字列は、文字列の最後にNull(数字のゼロ)が来るが、普通はAPI文字列関数を利用して作成する事が多い。 文字列を作成するときに利用したlstrcpy()関数は、標準的なBASIC言語の関数ではなくてWindows環境のC/C++関数。 lstrcpy()関数を用いてString型からByte配列型Null終端文字列を作るのである。 print文で文字列を表示する場合は変換が必要で、MakeStr()関数にてByte配列のNull文字列をString型に変換しておく。 BASIC標準のPrint文は、引数がString型だからである。 lstrcpy()関数などを用いないで同等のByte型Null終端文字列を作る場合は、下記のようにする。 nstr(0)=97nstr(1)=98nstr(2)=99nstr(3)=0print MakeStr(nstr) Print文では引数がString型なので変換が必要だが、Msgbox等では元々Win32APIの関数なのでByte配列Null終端文字列 をそのまま扱え、String型へ変換する必要がない。 lstrcpy(nstr,"MessageBox")Msgbox 0,nstr Byte型配列Null終端文字列と、String型文字列との相互変換は、MakeStr(),StrPtr()関数などを使う事が出来る。 Byte型配列の文字列の初期化時の注意点 Byte型配列の文字列では、String型とは異なりDim文などで確保されたメモリー内容についてきちんと初期化 されている保証がないので、配列やメモリー領域を確保したりする場合は初期化が必要になる。 32個のByte配列を初期化する場合、For文を使う例を示す。 Dim nstr(31) As ByteFor i=0 to 31nstr(i)=0next i String型ではZeroString()関数が用意されているが、ここではByte型配列の文字列なので、 同等の処理は、ZeroMemory()関数を用いて行う事が出来る。 ZeroMemory(nstr,32) ZeroMemory()では要素数を与える。配列の添え字と要素数が一致しないので注意。 文字列のエスケープ記号処理の注意点 abの文字列は、C/C++のようなエスケープ記号をサポートしない。標準的なBASIC文字列は"\r\n"のような改行を 扱う事は出来ない。String型の文字列は、"\r\n"を4文字の文字列として処理する。 Print "abcdef\r\n"'エスケープしない文字列 abの文字列はAPIのwsprintf()関数やlstrcpy()関数内でもエスケープ記号は処理されないので注意が必要。 しかし、Ex修飾するとエスケープ記号が利用でき、"abc\ndef"という文字列が利用可能。 Print Ex"abc\r\ndef"'エスケープ記号が有効 エスケープ記号はC/C++において多用される記法だが、同等のコードは、 従来のBASIC型の記法を用いてChr$()関数を用いて改行コードを追加することも可能。 Print "abc"+Chr$(13)+Chr$(10)+"def"lstrcpy(nstr,"abc"+Chr$(13)+Chr$(10)) ワイド文字列の扱いについての注意 日本語など国際化された文字列は、英数字ASCII文字列の255文字では扱えない。多国語対応では1Byte以上を使って 1文字を表す文字コードがマルチバイト文字、ワイド文字等が使われ、漢字も1Byte以上で表記される。 abで用意されている文字列関数は基本的に1Byte処理を行いこれで十分な場合もあるが、場合によっては問題が起きる。 そのためInStr2()関数が提案されている。 http //hira.hopto.org/tips/activebasic/memory/instr_multibyte.xhtml String文字列へのポインタについての注意 abでは、Byte/Long/Double型のポインタは存在するがString型へのポインタは無い。String型は内部でメモリーを確保し 文字列作成しているので、String型文字列自体がポインタとして扱われていると表現できる。 abにおいてWin32API関数の文字列引数でString型とByte配列Null終端文字列が等しく扱えて互換性があるように 見えるのは、両方ともポインタアクセスを行っているため。 String文字列をポインタで指して直接文字列を配列操作する場合、内部処理は不明なのでString型で扱わない方が良い。 どうしてもポインタ操作を行う場合は、一旦Byte型配列の文字列に変換して処理するのが良い。 String型を用いる場合は、標準BASICで用意されている文字列関数を使うようにしてポインタ操作は避ける方が良い。 異なる文字列間の相互変換は、http //www.mb.ccnw.ne.jp/garger-studio/gameprog/ab0052.htmlに詳しく記載されている。 String型文字列の詳細は、http //www.mb.ccnw.ne.jp/garger-studio/gameprog/ab0051.htmlに記載されている。 String型文字列として利用されていた領域はabプログラム終了と同時に開放される。 なお、abのポインタの記法は、*Byte/BytePtr双方が可能だが、*Byteと書く記法はC/C++と同じ。Helpに書かれている記事 ではBytePtrと記載されているが同じ意味。
https://w.atwiki.jp/lgp4/pages/28.html
文字列関数 文字列操作を代行する関数です ASC 文字列コード 文字の ASCIIコードを取得する ASC(p1) 返り値 = 数値 p1 = 文字(char) NO = ASC("A") CHR 文字コード ASCIIコードで文字を指定する CHR(p1) 返り値 = 文字列(char) p1 = 数値(int) WORD$ = CHR(65) LENG 文字コード 指定された文字列の(半角(1バイト)を単位に)長さを求めます LENG(p1) 返り値 = 数値(int) p1 = 文字列(char) CNT = LENG("HELLO,WORLD") STR 文字コード 整数値を文字列(n進数の形式)に変換する STR(p1) 返り値 = 文字列(char) p1 = 文字列(char) p2 = 数値(int) - 変換する進数指定,初期は10 WORD$ = STR(2007)
https://w.atwiki.jp/imops-forth/pages/40.html
文字列の操作に関する、Forth標準ワードのいくつかについて説明する。文字列の操作というよりも、文字列バッファの操作という観点から集めた。文字列用ワード群はオプショナルであり、全ての環境で定義されているとは限らない。 文字列の扱いは環境毎に多様化しているようである。したがって、文字列用として標準となっているワードはごく僅かである。 Mopsでも、基本的クラスライブラリとして、ヒープベースの文字列を扱うStringクラスがあり、その拡張としてString+クラスがあるため、文字列操作は専らオブジェクトにメッセージを送ることで行う。 CMOVE CMOVE CMOVEは文字列をバッファにコピーするワードである。パラメターを3つ取り、入力バッファのアドレス、コピー先バッファのアドレス、バイト数の順となる。 CMOVE ( addr1 addr2 u -- ) \ addr1から始まるバッファのデータを、addr2から始まるバッファにuバイトコピーする。下から上へ 左端(低いアドレス)から順に1バイトずつコピーする。 スタックコメントのuはunsigined(符号なし)数の意味で、正か0の数値ということだが、文字列の場合、これは文字列のバイト長(length)である。 古典的にはlenとも表記する。意味上はlenの方が分り易いと思うが、規格にしたがって、uと表記する。 1文字が1バイトであるという想定から、データをバイト系列として扱って移動するこのワードは文字列用拡張ワードとされているが、データは文字列である必要はない。要するにメモリー上のデータを移動するワードである。 CMOVE は、内容はCMOVEと同じだが、データは右端(高いアドレス)から順にコピーされる。 CMOVE ( addr1 addr2 u -- ) \ addr1から始まるバッファのデータを、addr2から始まるバッファにuバイトコピーする。上から下へ 移動順序が違うワードが準備されている理由は、addr1に当たるバッファとaddr2に当たるバッファの領域が重なっている場合について配慮してあるのである。addr2がadd1より低いアドレスにあるときは、CMOVEを用いれば、add2バッファの後ろの端がaddr1にかかるときも全て正しく移動できるし、逆にadd1がaddr2より低いアドレスのときは、CMOVE を用いれば、add1バッファの後ろの端がaddr2にかかるときも正しく移動できる。もっとも、両バッファが分離されているときには、そのような配慮は不要である。普通はCMOVEを用いる。 MopsではCMOVEのみ定義されている。 MOVE MOVEは一般のメモリー操作ワードであって、文字列拡張ワードには含まれていないが、文字列のコピーに使えなくはない。入力パラメターはCMOVE等と同じである。 MOVE ( addr1 addr2 u -- ) \ addr1から始まるバッファのデータを、addr2から始まるバッファにuバイトコピーする。 大きいサイズのデータの場合、一般にはこちらの方が効率が良いようである。また、addr1バッファとaddr2バッファに重なり合う部分があっても、自動的に正しい内容がaddr2バッファにコピーされる(当然だが、重なっている部分のコピー元の文字列は、最後は上書きされてしまうが)。addr1、addr2の位置関係が予めわからず、バッフアが重なっている可能性も否定できない場合には、こちらを使えば良い。 /STRING -TRAILING /STRINGは、文字列の頭を切除するワードである /STRING ( addr1 u1 n -- addr2 u2 ) \ addr1 u1 で指された文字列バッファの左端(addr1に当たる)をn移動し、長さも調整。 nは負でもよい。その場合には、初めの部分を伸ばす操作になる。しかし、もちろん、addr1よりも前の部分も文字列バッファに属していることが前提である。 -TRAILINGは、文字列の終わりに空白文字が続いている場合に、それを切り落とすワードである。 -TRAILING ( addr1 u1 -- addr2 u2 ) すべて空白文字からなる文字列なら、もちろん、返される長さu2は0である。 このワードはMopsでは定義されていない。 FILL BLANK ERASE FILLとERASEはコアおよびコアエクステンションワードで、オプショナルではない。 FILLは、メモリーアドレスと長さ、それに文字コードを入力として取り、アドレスと長さで表記されたバッファを同じ文字コードで埋める。 FILL ( addr u c -- ) \ addrからuバイトをcで満たす したがって、例えば、 ( -- addr len ) CHAR a FILL とすれば、addrからlenバイト分、小文字のaを(len個:lenバイト分)詰める。 BLANKは、バッファアドレスと長さ(バイト)を入力として取り、そこに半角空白文字を詰める。 BLANK ( addr u -- ) つまり、BLANKは 32 FILL と同値である。なお、Mopsでは、BLANKSとして定義されている。 ERASEは、BLANKと同じように、バッファのアドレスとバイト長を取るが、こちらは0を詰める。文字列バッファというよりも、一般にメモリー領域をクリアーするためのワードである。 ERASE ( addr u -- ) 0を番兵とする文字列を格納するバッファーなどは、これで消去しておけばよい。文字列だけでなくメモリー領域一般について内容を消去することにも利用できるが、1バイトずつ消すので、領域サイズが大きい場合は、あまり効率は良くない。機能としては、 0 FILL と同値である。 SEARCH SEARCHは、2つのaddr len文字列を取り、前の文字列の中に、後の文字列が含まれているかどうかを探すワードである。ヒットした場合、その含まれている部分のaddr lenと、TRUEフラグを返し、ヒットしなかった場合、前の文字列(内部検索された文字列)のaddr lenとFALSEフラグを返す。 SEARCH ( addr1 u1 addr2 u2 -- addr3 u3 b ) \ addr1 u1文字列の中にaddr2 u2文字列を探す。 Forth環境によって文字列関連の機構は極めて多様である。上のようなforth規格に取り入れられたワードは、比較的多くのforthに共通するものという観点で取られている。 Mopsでは、前にも述べたように、Stringクラスのインスタンスを利用するのが標準であり、通常のワードとしてのSEARCHなどは定義されていない。Mopsの文字列オブジェクトでは、検索には該当部分のアドレスとバイト長を返すのではなく、アクティブパートという機構を用いる。String+クラスのインスタンスを用いれば、大文字小文字を区別する/しないを切り替えて検索できる。 PAD なお、文字列固有のものではないが、データのバッファーメモリーとして、PADが準備されている。 PAD ( -- addr ) \ データバッファーの先頭アドレスをスタックに置く。 文字列を加工する際に、一時的なストレージとしても利用出来る。PADメモリーの大きさは、規格では最小で84文字分(84バイトか)とされているが、通常はもっと大きく確保されている。iMopsでは512バイトである。なお、PADメモリーはシステムが利用する場合があるので、格納したものは直ちに利用するべきこととされている。プログラムが使用していないからといって、いつまでも同じ内容が保存されていることは保証されない。 次 forth環境への問い合わせ
https://w.atwiki.jp/udhimaster/pages/21.html
文字列変数を操作したり、キーボードからの文字入力を受け付けることができます。 目次 各部の説明1. 代入先の指定 2. 代入方式 3. 代入する文字列 4. 変数名の設定 各部の説明 1. 代入先の指定 代入先の文字列変数を指定します。 「代入先を変数で指定」する際は、通常/予備変数に3000000(文字列変数の呼び出し値)以上の値を入れて使用してください。 2. 代入方式 代入の方式を選択します。 ここでは、代入先を「左辺」、代入する文字列を「右辺」と呼ぶことにします。 「=」 右辺を左辺にそのまま代入します。 「+=」 右辺を左辺に追加します。 「に↓から上1行コピー」 右辺の上1行を、左辺に代入します。 「に↓から上1行切り出し」 右辺の上1行を切り出し、左辺に代入します。 処理を行うと、右辺の上1行は消去されます。 「に↓から1文字切り出し」 右辺の先頭1文字を切り出し、左辺に代入します。 処理を行うと、右辺の先頭1文字が消去されます。 全角、半角共に対応しています。 特殊文字の場合は特殊で、1回の処理で、\A+なら「\A+」、\c[1]なら「\c[1]」を切り出すことができ、 \r[X,A]など文字列が入る特殊文字の場合は「\r[」だけを切り出します。 「に↓のファイル内容読込」 右辺のファイル名の内容を読み込み、左辺に代入します。 ファイルがなかった場合は、「 NoFile 」が代入されます。 「をファイル↓に出力」 左辺の内容を、右辺のファイル名で保存します。 「に↓フォルダのファイルリスト取得」 右辺のフォルダ名の中にある、ファイル名一覧を取得し、左辺に代入します。 一覧は1ファイルにつき1行なので、各々のファイル名は「上1行切り出し」などを使用して取得してください。 フォルダがなかった場合や、ファイルを対象にした場合などは、「 ERROR 」が代入されます。 「から↓の文字列を全消去」 左辺から、右辺の文字列だけを全て消去します。 (例:左辺が「あいうえお」のとき、「い」を全消去すると、左辺が「あうえお」となります) 「から以下の文字列を置換」 左辺から、左側の入力欄の文字列を、右側の入力欄の文字列で置換します。 (例:左辺が「あいうえお」の時、「え」を「お」で置換すると、左辺が「あいうおお」になります) (コンマ区切り(CSV)のデータを読み込んだ際に、「,」を改行で置換して、1行切り出しで読み込みなどの用途に使えるかと思われます) 「 から指定文字まで切り出し 」 左辺の先頭から、入力欄に入れられた文字列までを切り出して、左辺に代入します。 (例:左辺が「あいうえお」のとき、「う」まで切り出すと左辺が「あい」になります) 指定した文字列が見つからない場合は、「 NotFound 」が代入されます。 「 の指定文字以降を切り出し 」 左辺の、入力欄に入れられた文字列以降を切り出して、左辺に代入します。 (例:左辺が「あいうえお」のとき、「う」以降を切り出すと左辺が「えお」になります) 指定した文字列が見つからない場合は、「 NotFound 」が代入されます。 3. 代入する文字列 代入する文字列は、次の4種類の方法で指定できます。 手動入力 手動で文字を入力します。 この入力には、\v[?]や\s[?]といった特殊文字も使用可能です。 文字列変数 文字列変数を使います。 キーボード入力 入力欄を表示し、プレイヤーが入力した文字列を使用します。 「文字数(半角)」で、入力できる文字数を指定できます。全角文字は「2文字」として換算されます。 「キャンセル有」にチェックすると、Escキーで入力をキャンセルすることができます。 「左辺を書換」にチェックすると、左辺に元から入っている文字列が入力された状態で、入力欄を表示します。 ※テストプレイ時に限り、キーボード入力中に 「F7~F9キーなどのデバッグメニューを表示する」あるいは「F11キーで再読み込みする」と 入力中の文字のサイズが変わってしまいますが、この動作自体は仕様です。 ロード位置を変数で指定 「変数の値」の文字列変数を読みに行きます。 たとえば、読み込んだ変数の値が3000002(文字列変数2番の呼び出し値)という風に格納されていれば、文字列変数2番を読みに行きます。 4. 変数名の設定 変数に名前を付けたり、変数の最大数を増やしたりすることができます。 設定したい変数をプルダウンリストから選び、設定したい名前を入力したら「名前を付ける」ボタンを押してください。 「↓コピー」ボタン プルダウンリストで選択中の変数の名前を、下の「変数名」の欄にコピーします。 「サイズ+1」ボタン プルダウンリストで選択中の変数種の最大数を一つ増やします。 例えば、「V3-1」(予備変数3の1番)が表示されているときに「サイズ+1」ボタンを押すと、予備変数3の変数最大数が一つ増加します。 ショートカットキー 変数名欄に入力カーソルが当たってる状態で、下記のショートカットキーが使用できます。 キー 説明 ↑↓ 名前を変える変数を切り替える Enter 名前を設定する(「名前を付ける」ボタンを押したのと同じ) Shift + ↓ 対象変数の名前を名前欄にコピー(「↓コピー」ボタンを押したのと同じ) Shift + ← 名前欄をクリアする
https://w.atwiki.jp/unitymemo/pages/44.html
文字列の長さb = a.Length; 文字列の部分取り出しb = a.Substring(0, 2);//先頭から2文字→文字 b = a.Substring(1, 2);//2文字目から3文字→字列 b = a.Substring(1);//3文字目以降全部→字列A 文字列の分割string a = "name date text"; 分割文字を として分割する string[] b = a.Split( , ); b[0]にはname b[1]にはdate b[2]にはtextが入る 複数の区切り文字を使うchar[] KUGIRI = { , , , ? , . , ! , ; }; string[] b = a.Split(KUGIRI); 文字列検索string a = "name date text"; int b = a.IndexOf( ); 先頭を 0とした,最初に発見した文字の位置(=文字数)が入る この場合、b=4 文字列の置換string text = text.Replace ("abc", ""); 左右の空白をとるtext = text.Trim() 文字列を数字にする int i = int.Parse(str);
https://w.atwiki.jp/qtmemo/pages/36.html
コンテンツ コンテンツ 文字列に関係するクラス 文字列に関係するクラス QChar 16ビットUnicode文字を扱うクラス QString QChar文字列を扱うクラス QStringRef QStringクラスなどで使用される部分文字列を扱う読み取り専用のクラス QLatin1Char Latin1文字を扱うクラス QLatin1String Latin1文字列を扱うクラス QRegExp 正規表現を扱うクラス QRegularExpression 正規表現を扱うクラス QRegularExpressionMatch QRegularExpressionMatchIterator QRegularExpressionValidator QTextCodec テキストエンコーディングを扱うクラス
https://w.atwiki.jp/chakimar/pages/22.html
String型をint型に変換 int num = Integer.parseInt(str); try catch(NumberFormatException)で囲むとStringの中身が数値以外の時はじく 文字列の長さを返す関数 length(); int len = str.length(); 文字列を比較する関数 equals(); boolean torf = A1.equals(A2); 文字列を追加する関数 append(); StringBuffer sb = new StringBuffer(str1); //str1は追加される方 sb.append(str2); //str2は追加する方 文字列を挿入する関数 insert(); StringBuffer sb = new StringBuffer(str1); sb.insert(5,str2); //追加したい場所までの文字数 英語も日本語も1文字と数える StringBufferをStringに変換する関数 toString(); String str = sb.toString(); 文字列の指定された位置の文字を入手 String str = "abcd"; char c = str.charAt(0); c = a となる 文字列の指定した位置からのコピーを入手 String str = "abcd"; String str2 = str.substring(1); //substringのsは小文字!! str2 = "bcd"となる 数値を文字列に変換 String str = Integer.toString(3); または String str = String.valueOf(3); "abcdef"のうち"abc"までをコピーしたい場合 String str = str.substring(0,3); String型はnullで初期化する String str = null; switchの条件文にString型は使えない int型をString型に変換 String str = String.valueof.(num); 文字列の生成について 文字列をループの中でString str = str + " ";をするとstrというオブジェクトとstr + ""というオブジェクトができる だからメモリが足りなくなる!!→StringBufferで付け足す。 Stringは不変オブジェクト 特殊な文字列について "\\"は1文字とカウントされる "\\"だとStringのsplit()が使えない →"\\u005c"にすると使える やさしいJava 第3版 (やさしいシリーズ)
https://w.atwiki.jp/my-sql/pages/13.html
HOME 関数 文字列関数 文字列関数 文字列の長さ BIT_LENGTH CHAR_LENGTH LENGTH 変換 CONV LOWER REVERSE UPPER 検索・置換・正規表現 ELT FIELD FIND_IN_SET INSERT() INSTR LEFT LOCATE LPAD MAKE_SET REPLACE RIGHT RPAD SUBSTRING SUBSTRING_INDEX 文字列連結 CONCAT CONCAT_WS REPEAT その他 ASCII LTRIM QUOTE RTRIM TRIM
https://w.atwiki.jp/chibutsu/pages/21.html
文字列を抜き出す 文字変数を作る a= chibutsu これでprint,aすれば「chibutsu」と表示される。 文字列を抜き出す(strmid) sentence2=strmid(sentence,n,length) 文字列sentenceのn何番目の文字からlengthの長さの文字列を抜き出す。sentenceが一次元配列のときはそれぞれの要素に関して同じ処理を行う。 ファイルパスのリストを作る(findfile) 条件に合うファイルを探し,名前を配列として得る方法。 例えばD \dataというフォルダにN0730.ext、N0815.ext、N0830.ext、N0915.extという4つのファイルがあったとする。 file_path= D \data\N08*.ext path_list=findfile(file_path,file_num) path_list→[D \data\N0815.ext,D \data\N0830*.ext] file_num→2 これをループで一つづつ処理すれば、一度に大量のファイルを扱える。 文字変数内で特定の文字列の位置を調べる(strpos) file_path= D \chibutsu\data\N0830.ext index=strpos(file_path, \N ) == index=16 file_pathの中で\Nの位置を返している。 これでファイルの保存場所が変わってもstrmidでファイル名を取りだせる。 変数を文字変数に変換する(string) a=50 b=string(a) これでbは「50」という文字を格納する。 変換した文字変数は空白や小数点以下を含む。 IDL print,string(5) 5 IDL print,string(5l) 5 IDL print,string(5.0) 5.00000 IDL print,string(5.0d) 5.0000000 文字数を数える(strlen) IDL print,strlen( chibtsu ) 7 中身が文字でない時は文字に変換して数える IDL print,strlen(7) 8 IDL print,strlen(7.0) 13 文字変数の中の空白をなくす(strcompress strtrim) b=strcompress(b,/remove_all) もしくは b=strtrim(b,var) var=0か無指定なら文字列後ろの空白を、1なら文字列前方の空白を、2なら両方を消す。 改行 図中の文字列などで改行したいときは !C を用いる.例えば ytitle = dynamic !C pressure などとすればよい. 上付き/下付き文字 グラフ中などで文字を上付き/下付きにするにはそれぞれ!U, !Dを使う。またこれらの命令より後の文字はすべて上付き/下付きになってしまうので,!Nで通常の書式に戻す必要がある。以下例。 xtitile = F!D2!N [W/Hz/m!U2!N]