記号ps1s。 文字列を操作するための新しい関数。 文字列を操作するための関数StrSplit()、StrJoin()

文字列は、1C:Enterprise8システムのプリミティブデータ型の1つです。タイプの変数 ラインテキストが含まれています。

型変数値 ラインにあります 二重引用符。 このタイプのいくつかの変数を追加できます。

Per1="単語1";
Per2 = "Word 2";
Per3 = Per1 + "" + Per2;

最終的 Per3重要になります」 ワード1ワード2″。

さらに、1C:Enterprise 8システムは、文字列を操作するための関数を提供します。 主なものを検討してください:

EnterString(<Строка>, <Подсказка>, <Длина>, <Многострочность>) — この関数は、ユーザーがタイプの変数の値を指定できるダイアログボックスを表示するように設計されています ライン。 パラメータ <Строка> 必須であり、入力された文字列が書き込まれる変数の名前が含まれています。 パラメータ <Подсказка> オプションは、ダイアログボックスのタイトルです。 パラメータ <Длина> オプションで、入力文字列の最大長を示します。 デフォルトはゼロです。これは、長さが無制限であることを意味します。 パラメータ <Многострочность> オプション。 複数行のテキスト入力モードを指定します。True—行区切り文字を使用した複数行のテキスト入力。 False-単純な文字列を入力します。

文字列を入力でき、Unicodeの文字コードを知っている場合:

シンボル(<КодСимвола>) — コードは数字で入力されます。

Letter = Symbol(1103); // 私

文字のコードを見つけることができる逆関数もあります。

SymbolCode(<Строка>, <НомерСимвола>) — 指定された文字のUnicode数値を数値として返します。

テキストケース変換関数:

VReg(<Строка>) -文字列内のすべての文字を大文字に変換します。

HReg(<Строка>) -文字列内のすべての文字を小文字に変換します。

TReg(<Строка>) -文字列のすべての文字を大文字小文字に変換します。 つまり、すべての単語の最初の文字が大文字に変換され、残りの文字が小文字に変換されます。

文字列内の文字を検索および置換するための関数:

見つけるには(<Строка>, <ПодстрокаПоиска>) -検索サブストリングの出現の文字番号を検索します。 例えば:

検索( "文字列"、 "目"); // 4

StrFind(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) —検索サブストリングのオカレンスの文字番号を検索します。オカレンス番号は、対応するパラメーターで指定されます。 この場合、検索はパラメータで指定された数の文字から始まります。 StartPosition。文字列の先頭または末尾から検索できます。 例えば:

Number4 Entry = StrFind( 「守備」、"o"、検索方向。 まず、1、4); // 7

StrReplace(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) ソース文字列内の検索サブ文字列のすべての出現箇所を検索し、それを置換サブ文字列に置き換えます。

StrReplace( "String"、 "eye"、 ""); //ページ

空の行(<Строка>) -文字列の重要な文字をチェックします。 重要な文字がない場合、または文字がまったくない場合は、値が返されます 。 さもないと - 横たわる.

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) –ソース文字列内の検索サブ文字列の出現回数を計算します。

StrNumberOccurrences( 「勉強して、勉強して、もう一度勉強して」、 "勉強する" 、 "" ) ; // 3

StrTemplate(<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — パラメータを数値で文字列に置き換えます。 文字列には、「%1 ..%N」の形式の置換マーカーが含まれている必要があります。 マーカーの番号付けは1から始まります。パラメーター値の場合 未定義、空の文字列に置き換えられます。

StrPattern( 「オプション1=%1、オプション2 =%2」, "1" , "2" ) ; //パラメータ1=1、パラメータ2 = 2

文字列変換関数:

ライオン(<Строка>, <ЧислоСимволов>) 文字列の最初の文字を返します。

右(<Строка>, <ЧислоСимволов>) -文字列の最後の文字を返します。

水曜日(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) -長さの文字列を返します<ЧислоСимволов>、文字で始まる<НачальныйНомер>.

略語(<Строка>) 文字列の最初の重要な文字の左側にある重要でない文字を切り捨てます。

abbr(<Строка>) -文字列の最後の重要な文字の右側にある重要でない文字を切り取ります。

Abbrl(<Строка>) -文字列の最初の重要な文字の左側と、文字列の最後の重要な文字の右側の重要でない文字を切り取ります。

StrGetString(<Строка>, <НомерСтроки>) –複数行の文字列の文字列を数値で取得します。

その他の機能:

StrLength(<Строка>) -文字列の文字数を返します。

行数(<Строка>) -複数行の文字列の行数を返します。 行が前の行から改行文字で区切られている場合、その行は新しいと見なされます。

StrCompare(<Строка1>, <Строка2> ) -大文字と小文字を区別せずに2つの文字列を比較します。 関数はオブジェクトのように機能します 値の比較。 戻り値:

  • 1-最初の行が2番目の行よりも大きい場合
  • -1-2行目が最初の行よりも大きい場合
  • 0-文字列が等しい場合

StrCompare( "最初の行"、 "2番目の行"); // 一

1Cの情報は、参考書、ドキュメント、レジスターなどで表すことができます。

ただし、最終的には、これらのオブジェクトはすべてフィールドで構成され、フィールドは単純なタイプ(数値、文字列、日付)です。 そして、文字列の形で常により多くの情報があります。 したがって、文字列をより頻繁に操作する必要があります。

次に、1C言語の文字列を操作する方法を分析します。 並行して、自動テキスト分析のさまざまなオプションを試してみましょう。

文字列タイプ

文字列の長さは制限することも、無制限にすることもできます。 文字列値が属性から取得される場合、この制限は属性タイプで指定されます。

ユーザーがフォームに文字列を入力した場合、フォーム要素には「マルチラインモード」と「高度な編集」のチェックボックスを付けることができます。 1つ目は、行に「改行1C(Enter)」という文字が含まれている可能性があることを意味します。 2つ目は、文字列にTABなどの他の1Cサービス文字が含まれている可能性があることです。

たとえば、ReadText()を使用して文字列をファイルから取得する場合は、エンコーディングも重要になります。ファイルを読み取るときは、エンコーディング(UTF-8、KOI8など)を指定する必要があります。

サービスシンボル1C

特殊文字を操作するには、Symbols1C列挙を使用します。

たとえば、次の2つの単語で構成される文字列値。
TextString="最初の行"+Symbols.PS+"2番目の行";

たとえば、テキストで改行1Cを検索します。
位置=Find(TextString、Symbols.PS);

次の特殊文字を使用できます。

  • CRとLF
    改行1Cを意味します。 多くの場合、テキストファイルに含まれています。
    ASCIIの文字コードは0x0Dと0x0Aで、Unicodeの文字コードはU+000DとU+000Aです。

    1C言語では、Symbols.CRとSymbols.LF、またはロシア語のSymbols.VKとSymbols.PSのように見えます。 1Cコードで作成されたときに1Cラインを転送するには、PSを使用するだけで十分です。

その他の記号1C

1Cの文字列は、Unicode形式で「物理的に」使用されます(Unicode、http://ru.wikipedia.org/wiki/%DE%ED%E8%EA%EE%E4)。

これまでに文字の「エンコーディング」に出くわしたことがない場合は、次の点に簡単に注意してください。

  • 文字列を操作する場合、コンピューターは文字自体ではなく、文字の数字を使用します。
  • 「人間」のアルファベット(英語、ロシア語、ギリシャ語、中国語など)がたくさんあり、サービスと「非印刷」の1C文字もあるため、コンピューターのアルファベットにはいくつかのバリエーションがあり、そのうちの1つはUnicodeです。 、すべての言語の1C文字が含まれます
  • Unicodeアルファベットは次のようになります。
    o一般的な「非印刷」サービスシンボル1C
    o句読点と数学
    o数字
    o英語のアルファベット
    o追加。 ヨーロッパ言語(ドイツ語など)で使用される英語のアルファベットの1C文字
    oギリシャ文字
    oロシア語のアルファベット
    o..。

必要に応じて、Unicodeで使用可能なすべての1C文字を1C文字列で使用できます。

まず、Windowsにレイアウトがインストールされている場合は、キーボードから入力できます(デフォルトでは、英語とロシア語は通常ロシアで設定されています)。

次に、次の方法を使用してダイヤルできます。

第三に、プログラムコードから作業できます。 Symbol(Digit)関数は、次の文字を返します。 指定番号、およびCharacterCode(String)関数は、文字列の最初の文字の文字番号を返します。 文字列に別の文字が必要な場合は、CharacterCode(String、LetterNumber)。

たとえば、次の行に文字Žを追加してみましょう。
TextString="町で美味しいビール"+Symbol(381)+ "drobinek";
//結果:「Ždrobinekの美味しいビール」

バージョン8.3.6.1977で実装されました。

文字列を操作するための関数のセットを拡張しました。 これは、文字列データを解析するためのより高度なツールを提供するために行われました。 新しい機能は、テキスト分析の技術的タスクに便利で便利です。 フォーマットされた形式のデータを含むテキストの解析に関連するタスク。 これは、機器から受信したいくつかのファイルの分析、またはたとえば、技術ログの分析である可能性があります。

新しい関数が実行するすべてのアクションは、以前に実行できました。 埋め込まれた言語で書かれた多かれ少なかれ複雑なアルゴリズムの助けを借りて。 したがって、新しい機能は基本的に新しい機会を提供しません。 ただし、コードの量を減らし、コードをより単純で理解しやすいものにすることができます。 さらに、アクションの実行を高速化できます。 もちろん、プラットフォームに実装されている関数は、組み込み言語で記述された同様のアルゴリズムよりも高速に動作するためです。

フォーマット関数StrTemplate()

この関数は、パラメーターを文字列に置き換えます。 このような変換の必要性は、たとえば警告メッセージを表示するときによく発生します。 この関数の構文は次のとおりです。

StrTemplate(<Шаблон>, <Значение1-Значение10>)

<Шаблон>パラメータ表現を置き換える文字列です。

<Значение1> , ... <Значение10>-これらはパラメータ(最大-10)であり、その表現を文字列に代入する必要があります。

置換を実行するテンプレート内の特定の場所を指定するには、%1、...%10の形式のマーカーを使用する必要があります。 テンプレートに含まれるマーカーの数と値を含むパラメーターの数は一致する必要があります。

たとえば、そのような演算子を実行した結果は次のとおりです。

行があります:

2行目のデータエラー(日付型が必要)

文字列関数StrCompare()

この関数は、2つの文字列を大文字と小文字を区別せずに比較します。 たとえば、次のようになります。

ValueComparisonオブジェクトを使用する前に、同じアクションを実行できます。

ただし、新しい関数の使用は簡単に見えます。 さらに、この関数は、値比較オブジェクトとは異なり、シンクライアントとWebクライアントの両方で機能します。

文字列関数StrBeginsC()、StrEndsTo()

これらの関数は、文字列が指定された部分文字列で始まるかどうか、または文字列が指定された部分文字列で終わるかどうかを判別します。 これらの関数のアルゴリズムは、組み込み言語で実装するのは難しくありませんが、それらの存在により、よりクリーンで理解しやすいコードを記述できます。 そして、彼らはより速く働きます。

たとえば、Ifステートメントで使用すると便利です。

文字列を操作するための関数StrSplit()、StrJoin()

これらの関数は、指定された区切り文字に従って文字列を部分に分割します。 またはその逆に、複数の行を1つに結合し、選択した区切り文字をそれらの間に挿入します。 技術ログであるログの作成や分析に便利です。 たとえば、技術ログエントリをさらに分析するのに適したパーツに簡単に分解できます。

文字列を操作する関数StrFind()

古いFind()関数の代わりに、 新機能、追加機能があります:

  • さまざまな方向(最初から、最後から)で検索します。
  • 指定された位置から検索します。
  • 指定された数(2番目、3番目など)のオカレンスを検索します。

実際、これは古い関数の機能を複製します。 これは、古いバージョンでコンパイルされたモジュールとの互換性を維持するために行われます。 古いFind()関数は、もう使用しないことをお勧めします。

以下は、新しい検索機能を使用した例です。 逆方向検索は、URL内のファイルのフルネームなど、形式化された文字列の最後の部分が必要な場合に役立ちます。 また、指定された位置から検索すると、文字列全体ではなく、既知のフラグメントを検索する必要がある場合に役立ちます。

1C8.3の特殊文字-セット 特殊文字文字列データ型の場合。

それぞれについて詳しく見ていきましょう。

1Cの特殊文字:VK、VTab、NPP、PS、PF、タブ

特殊文字は、グローバルプロパティ「Characters」を使用して呼び出されます。次に例を示します。

Text="タブの前のテキスト"+Symbols.Tab+"タブの後ろのテキスト";

267の1Cビデオレッスンを無料で入手:

  • VC(CR)-キャリッジリターン。 昔、ドットマトリックスまたはデイジーホイールプリンターでは、この文字コードは、プリントヘッドを行の先頭に戻すコマンドとして使用されていました。
  • NSP(NBSp)-ノーブレークスペース(多くの場合、数値文字列で見られます。例:1000)。
  • PS(LF)-改行(LF-改行)-ドラムを1行下にスクロールすると、プリントヘッドが同じ場所にあります。
  • PF(FF)-フォーマット変換。 シートがプリンタから排出され、新しいシートから印刷が開始されます。
  • タブ(タブ)-タブ文字。 水平集計-最も近い列に印刷するための配置方法で、いくつかの数値の倍数(たとえば、8、16、24 ...)。
  • VTab(VTab)-垂直集計。 それは水平に似ていますが、私たちだけがライン上に配置されています。 プリンタドラムのスクロールを引き起こします(プリントヘッドは同じ位置(列)に留まります!)

PS + VKは、2つの操作を実行する組み合わせです。ドラムを1行下にスクロールし、印刷キャリッジを行の先頭に戻します。これは、ユーザーがEnterキーを押して受け取ると予想されるものに対応します。

1Cプログラミングを学び始めている場合は、 無料コース(忘れてはいけない

文字列タイプは、すべてのプログラミング言語で使用されています。 これは原始的であり、1Cにはそれを操作するための多くの関数があります。 この記事では、詳しく見ていきます さまざまな方法例を使用して、1C8.3および8.2の文字列タイプを処理します。

ライン

任意の型の変数を文字列に変換するために、同じ名前の「String()」関数があります。 入力パラメータは変数自体になり、その文字列表現が取得されます。

String(False)//「No」を返します
String(12345)//「12345」を返します
String(CurrentDate())// "21.07.2017 11:55:36"

プリミティブ型だけでなく、ディレクトリやドキュメントの要素など、他の型も文字列に変換することができます。

省略されたLP、省略されたL、省略されたP

これらの関数の入力パラメーターは、文字列型変数です。 関数は、重要でない文字(スペース、キャリッジリターンなど)を削除します。それぞれ、左側と右側から、左側からのみ、右側からのみです。

abbrl( "両側のスペースが削除されます")//"両側のスペースが削除されます"
abbr( "両側のスペースが削除されます")//"左側のスペースが削除されます"
abbr( "両側のスペースが削除されます")//"右側のスペースが削除されます"

レオ、右、中

これらの関数を使用すると、文字列の一部を切り取ることができます。 Lion()関数は、指定された長さの左側にある文字列の一部を返します。 「Right()」関数も同様ですが、右側でトリミングが行われます。 「Wed()」関数を使用すると、文字列を選択する文字番号とその長さを指定できます。

Lion( "String variable"、4)//"Stro"を返します
Right( "String variable"、7)//"variable"を返します
avg( "文字列変数"、2、5)//"troco"を返します

StrLength

この関数は、文字列変数に含まれる文字数を決定します。

StrLength( "Word")//実行結果は5になります

見つけるには

この関数を使用すると、文字列変数内の文字列の一部を検索できます。 戻り値は、見つかった文字列の先頭の位置を示す数値になります。 一致するものが見つからない場合は、ゼロが返されます。

検索では大文字と小文字が区別されることに注意してください。 元の文字列に検索サブ文字列が複数出現する場合、関数は最初の出現の先頭を返します。

Find( "one、two、one、two、three"、 "two")//関数は数値6を返します

空の行

この関数を使用すると、文字列が空かどうかを判断できます。 スペース、キャリッジリターンなどの重要でない文字は考慮されません。

EmptyString( "Vasily Ivanovich Pupkin")//関数はFalseを返します
EmptyString( "")//関数はTrueを返します

VReg、NReg、TReg

これらの関数は、文字列変数を比較および変換するときに非常に役立ちます。 「Vreg()」は元の文字列を大文字で返し、「HReg()」は小文字を返し、「TReg()」は個々の単語の最初の文字が大文字になり、後続のすべての文字が小文字になるようにフォーマットします。

VReg( "GENERAL DIRECTOR")//戻り値-"GENERAL DIRECTOR"
HReg( "GENERAL DIRECTOR")//戻り値-"CEO"
TReg( "GENERAL DIRECTOR")//戻り値-"General Director"

StrReplace

この関数は、の置換に類似しています テキストエディタ。 文字列変数で、ある文字または文字のセットを別の文字に置き換えることができます。

StrReplace( "red、white、yellow"、 "、"、 ";")//"red;を返します 白; 黄"

StrNumberRows

この関数を使用すると、テキスト変数の改行で区切られた行数を判別できます。

以下の例のループは、StrNumberRows関数が値3を返すため、3つの円を通過します。

Ind \ u003d 1 by StrNumber of Lines( "Line1" + Symbols.PS + "String2" + Symbols.PS + "Line3")ループ
<тело цикла>
EndCycle;

StrGetString

この関数は、前の関数と同じように複数行のテキストで機能します。 これにより、テキスト変数から特定の文字列を取得できます。

StrGetString( "String1" + Symbols.PS + "String2" + Symbols.PS + "String3"、2) //「Line2」を返します

StrNumberOccurrences

この関数は、検索された文字列内の文字または部分文字列の出現回数をカウントします。

StrNumberInstallations( "a; b; c; d;"、 ";")//関数は数値4を返します

シンボルとSymbolCode

これらの関数を使用すると、Unicodeコードで文字を取得したり、文字自体でこのコードを判別したりできます。

SymbolCode( "A")//関数は数値1040を返します
SymbolCode(1040)//関数は「A」を返します

文字列を操作するときの頻繁なタスク

文字列の連結

複数の文字列を連結(連結)するには、加算演算子を使用するだけです。

"Line 1" + "Line 2"//2行追加した結果は"Line1Line2"になります

型変換

型を文字列(たとえば、辞書要素や数値などへの参照)に変換するには、「String()」関数を使用するだけで十分です。 「ShortLP()」のような関数も変数を文字列に変換しますが、重要でない文字はすぐに切り捨てられます。

String(1000)//「1000」を返します

数値を文字列に変換するとき、プログラムは自動的に千を区切るスペースを追加することに注意してください。 これを回避するために、次の構造を使用できます。

StrReplace(String(1000)、Characters.NPP、 "")//「1000」を返します

String(Format(1000、 "CH ="))//「1000」を返します

文字列内の引用

多くの場合、文字列変数に引用符を入れる必要性に対処する必要があります。 これは、コンフィギュレーターで記述された要求テキスト、または単なる変数のいずれかです。 この問題を解決するには、2つの引用文字を設定する必要があります。

Header = String( "Horns and Hooves LLC is us!")// "Roga and Hooves LLC is us!"を返します

マルチライン、改行

複数行のテキストを作成するには、改行文字(Symbols.PS)を追加するだけで十分です。

MultilineText = "First Line" + Characters.PS + "Second Line"

スペースを削除する方法

右または左のスペースを削除するには、関数「Stretch()」(および「Scrpt()」と「ScreenP()」)を使用できます。

StringWithoutSpaces = ShortLP( "Many Letters")//関数は値"Manyletters"を返します

数値を文字列に変換した後、改行しないスペースを削除する必要がある場合は、次の構文を使用します。

StringWithoutSpaces = StrReplace(String(99999)、Characters.NPP、 "")//"99999"を返します

また、プログラマーは多くの場合、次の構造を使用します。これにより、テキスト変数のすべてのスペースを削除したり、別の文字に置き換えたりすることができます。

StringWithoutSpaces = StrReplace( "hello"、 ""、 "")//"hello"を返します

文字列を相互に比較する

用語を通常の等号と比較できます。 比較では大文字と小文字が区別されます。

"hello" = "hello"//falseを返します
"Hello" = "Hello"//Trueを返します
"Hello" = "Goodbye"//Falseを返します