前提になりそうな知識がないため、非常に苦労しています。
お手すきな方、お助けください。
TextAreaのテキスト「昔々あるところにおじいさんがすんでいました」から、
「おじいさん」を「おばあさん」に置換したいんです。
どのようにして置換したらよいでしょうか。
よろしくお願いします。
ActionScriptで文字列を置換する、という質問だと想定してお答えします。
一応、真面目な回答です。
// TextAreaのidを「textArea」と仮定し予め次の文言が表示されているとします。 // textArea.text = "昔々あるところにおじいさんがすんでいました"; // 文字列の置換は次の通り var str:String = textArea.text; str = str.split("おじいさん").join("おばあさん"); trace(str); // 「昔々あるところにおばあさんがすんでいました」と出力される // TextAreaに反映する textArea.text = str; //置換されたテキストがTextAreaに表示される
※こういった文字列の操作はActionScriptの基礎となります。Flash Builderでコンテンツやアプリを作られる場合はこの他にもたくさんの基礎知識が必要になると思うので、一度ActionScriptやFlash Builderの入門書を勉強されたほうが、手っ取り早い気がします。
http://www.amazon.co.jp/dp/4839934061
※またFlexにはユーザーコミュニティがあり、Flexの質問ははてなQAでするよりも的確な答えが得られるでしょう。
※FlashやActionScriptの質問で、サンプルスクリプトを欲しいと質問するのはNGにあたる場合があるので気をつけましょう。
flash builder 4 では
標準的なショートカット
Ctrl+A、Ctrl+C、Ctrl+V
が利用可能と想定しました。
ActionScriptを使うらしいのですが、
ActionScriptで置換する方法がわかりません。
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/String.htmlこの辺が近いんでしょうが、何を言ってるんだかわからない状態です。
どなたか、簡単なサンプルをください。感覚がつかめたらいじり倒します。
>確かに、メモ帳は便利なんですが、今回はメモ帳は使えません。
「メモ帳は使えません」(利用不可能:使おうとしても使えない)
ではなく、
「メモ帳は使いません」(自分自身の意思で使わない)
ですね。
flash builder 4 自身の機能で置換されたいということは、
最初から理解はできています。
それが分かるまでのつなぎにと提案いたしました。
インスタンスにスクリプトを埋め込んじゃったりすると、
スクリプト全体を一覧することができないんじゃないかと想像するんですよ。
それだとガーッとコピーしてペッとメモ帳に貼ることはできないし、
mkonomiさんの方法はダメなのかなって。
だから偉い人たちはインスタンスにスクリプト書いちゃったりしないで、
インスタンス名をつけてテキストエリアから全部やるんだろうな、
とかなんとかぶつぶつ(ごめんなさいシステム屋の素質皆無なんでうまく説明できない)。
何がわかってないんだかわからない状態なので、質問が非常にあいまいだったんだと思います。
プログラムソースを置換したいのではなく、インポートしたテキストにたいして
定型処理として置換をおこないたいのです。
なので今回、メモ帳などのテキストエディタで置換はできないんです。という意味でした。
private function replaceMainText(searchStr:String, replaceStr:String):void
{
var pattern:RegExp = new RegExp(searchStr.replace(/([\^\$\\\.\*\+\?\|\{\}\[\]\(\)])/g, "\\$1"), "g");
mainTextField.text = mainTextField.text.replace(pattern, replaceStr);
// AS3 より前ならこうしてました
// mainTextField.text = mainTextField.text.split(searchStr).join(replaceStr);
}
<mx:Button label="Replace" id="replaceBtn" click="replaceMainText('おじいさん', 'おばあさん')" />
とくに(/([\^\$\\\.\*\+\?\|\{\}\[\]\(\)])/g, "\\$1")って…。
ActionScriptだけの本買ってみたいと思います。
置換する命令が備わっているならちゃんと置換する命令を使った方が良いかなと思ってこういった書き方にしましたが、その辺にこだわりが無ければいるか賞の回答で問題ないと思います。
かといって投げっぱなしもどうかと思うので、説明がうまくできる自信がありませんが、解説させていただきます。
AS3 になって、String で replace() が使えるようになりました。
http://www.adobe.com/livedocs/flex/3_jp/langref/String.html#replace()
文字列の置換の命令がデフォルトで備わったということです。たとえば、
var str:String = "昔々あるところにおじいさんがすんでいました";
str = str.replace(/おじいさん/g, "おばあさん");
これで、str が「昔々あるところにおばあさんがすんでいました」になります。
ただ、replace() は正規表現を使って置換するので、それだと困るかと思い、正規表現のメタ文字をエスケープしました。それが
>とくに(/([\^\$\\\.\*\+\?\|\{\}\[\]\(\)])/g, "\\$1")って…。
この部分です。
正規表現というのは、柔軟な検索・置換をするのに使う仕組みです。
使いこなすと特定の日付だけを抽出したり、「おじいさん」「お爺さん」「お祖父さん」などの文字列をを一気に「おばあさん」に置換できたりと、色々便利です。
便利なのですが、単純な置換をしたい場合には煩わしいので、私の書いた例では無効化しています。
メタ文字というのは、正規表現で一種の命令として扱われる特殊な文字の事です。
エスケープというのは、その特殊な文字を、命令ではなくを普通の文字として扱う、言い換えると無効化する行為の事です。
正規表現は、テキストエディタを作るのに必須な知識ではありませんが、知っていると色々と幅が広がります。
余裕ができたらネットや書籍などで調べてみて下さい。
単純な文字列置換を実現するなら、このコメントのはじめに書いた通り、yasu-log さんの回答や、もしくは私が先ほど書いたサンプルのコメントアウトされている部分で使われている方法の方が簡単です。
(mainTextField.text = mainTextField.text.split(searchStr).join(replaceStr); という部分です。)
この部分は、一旦「おじいさん」で区切った配列を作り、それを再び「おばあさん」で繋げるという作業をしています。
結果的に文字列の置換ができます。
詳しい仕組みを知らなくても気軽に使えるので、今回の場合はこちらの方法の方で良いと思います。
それと、私が書いたサンプルは
http://www.adobe.com/jp/devnet/air/flex/quickstart/building_text_editor.html
のサンプル、TextEditor.mxml に付け足しする形で書かれています。
実際に試していただく場合は、最後の一行、
<mx:Button label="Replace" id="replaceBtn" click="replaceMainText('おじいさん', 'おばあさん')" />
という行だけ、他の mx:Button が並んでいるところに付け足して下さい。
他、
private function replaceMainText(searchStr:String, replaceStr:String):void
{
~
}
の部分は、mx:Script の中にスクリプトとして書いて下さい。
あと、私は flash builder 4 は持っていません。(AS の検証は FlashDevelop で行いました。)
なので、ツール特有の操作は分かりません。
よけいな事書いてすみません。
>プログラムソースを置換したいのではなく、インポートしたテキストにたいして
定型処理として置換をおこないたいのです。
全く持ってド素人なので、公式サイトの書き方だと何を言ってるんだかさっぱりわかりませんでした。
慣れてくれば読める用にはなるんでしょうけど。
質問する段階では、AS3で書くことすらわかってませんでした。
本には「ここにスクリプトをかく」といった表現だったもので…。
質問後、確認しながらAS3でかくことがわかったという流れです。
現在はAS3にどんな道具(命令)があるのか、を一通り把握する段階です。
こんな状態なので質問自体が変な質問に。
yasu-logさんがエスパー回答してくれたので助かりました。
chinjuhさんの回答も、この質問に対してはあたりではありますよね。
あまりポイント付けませんでしたが、回答ありがとうございました。
お返しともいえませんが、メモ帳小ネタを。
WEBページにある表をExcelに貼付ける際に、うまくいかない場合、
一度メモ帳に貼付けてそれをさらにクリップボードへ。
そしてExcelに貼付けるときれいにいく場合があります。
HTMLからメモ帳へ移行する際に、クリップボードから装飾が取り除かれ、
それぞれのフィールドの区切りをタブにして出力されます。
メモ帳からExcelに貼付ける際に、タブは区切り点として認識されるためこのようなことが起こるようです。
取り合えず、テキスト操作のあたりから〜と思って始めたのですが、なかなか進みません。
回答する側に回れるよう、がんばって勉強してみます。
http://memo.bz/flas4/fl-memo1.php
とりあえず、書き方などは理解が進みました。
公式などにあるリファレンスもどこを変えればよいというのがわかると使えるようになりました。
やはり動くソースがあると、理解しやすいですね。
しかし、MSDNもそうですが、Adobe公式の説明書き。非常にわかりにくくて嫌いです;;