質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
AppleScript

AppleScriptは、アップル社が開発しているMac OS用のスクリプト言語。AppleScript本体に限らず、同じ言語で多くのAppleScript対応アプリケーションを操縦することが可能です。 自然言語(英語)に近い構文を持ちます。

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

2回答

3984閲覧

アップルスクリプトで行頭・行末のスペース・タブを削除する

ideal742

総合スコア8

AppleScript

AppleScriptは、アップル社が開発しているMac OS用のスクリプト言語。AppleScript本体に限らず、同じ言語で多くのAppleScript対応アプリケーションを操縦することが可能です。 自然言語(英語)に近い構文を持ちます。

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

2クリップ

投稿2017/03/06 02:36

編集2017/03/06 05:58

アップルスクリプト単体での文字操作はしづらいということで、
Perlを使用して文字置き換えを試みています。
ですが、正規表現"^ +"がうまく機能せず、
処理結果は、元の文字列のままになってしまいます。
たとえば、

●●●●●●●● ●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

で、2行目の行頭空白を削除したいということです。

###該当のソースコード

set aStr to regex_replace("/^ +//m", aStr) of doPerlKit on regex_replace(regex, target) set command to "$target = q/" & target & "/; $target =~ s" & regex & "; print $target;" --※引数を使用してperlコマンド生成 set str_result to exec_perl(command) of me return str_result end regex_replace on exec_perl(command) set one_liner to "perl -e '" & command & "'" as Unicode text --log {"one_liner =", one_liner} (*one_liner =, perl -e '$target = q/xxxx@ezweb.ne.jp/; $target =~ s/e/A/g; print $target;'*) --エラー処理 try set str_result to do shell script one_liner --※shell実行 --log {"str_result =", str_result} on error set str_result to "syntax error : " & one_liner --perlがエラーを吐いたとき end try return str_result end exec_perl

また、外部Perlを読み込む方法も試みています。

set aStr to do shell script "perl Perlファイルパス " & aStr

Perl

1#!/usr/bin/perl 2use Encode; 3use Encode::JP::H2Z; 4$decoded = $ARGV[0]; 5Encode::from_to($decoded, "utf-8", "euc-jp"); 6 7#問題の行 8$decoded =~ s/^ +//m; 9 10# 半角カナ→全角カナ <-- こちらは動作 11Encode::JP::H2Z::h2z(\$decoded); 12Encode::from_to($decoded, "euc-jp", "utf-8"); 13 14print "$decoded\n"; 15exit;

###試したこと
"\s"も試しましたが、こちらも失敗してしまいました。

###補足情報(言語/FW/ツール等のバージョンなど)
Mac OS X 10.9.5
AppleScript エディタ 2.6.1 (152.1)
AppleScript 2.3.2
perl 5.16.2 (Xcode 6.1 で記述)

何卒よろしくおねがいいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2017/03/06 03:53

もう少し分かり易く仕様を記載された方が良いと思います。例として、どのような入力の場合このような出力を期待するという情報があると、明確な回答が得られやすいかと。
ideal742

2017/03/06 05:10

ご指摘ありがとうございます。質問の修正をいたします!
guest

回答2

0

自己解決

#改行と全角スペースがある場合、改行に置き換えるループ処理

applescript

1--テキストファイルを読み込む。シェルスクリプトで処理する。 2set myFilePath to "対象のテキストファイルパス" 3set aStr to do shell script "cat < " & myFilePath 4 5repeat while (regex_match("/\\r /", aStr) of doPerlKit = true) 6 set aStr to regex_replace("/\\r /\\r/g", aStr) of doPerlKit 7end repeat 8 9script doPerlKit 10 11 --★targetがregexにマッチするか判定 12 on regex_match(regex, target) 13 set command to "$target = q/" & target & "/; if ($target =~ " & regex & "){ print q/1/; }else{ print q/0/; }" --※引数を使用してperlコマンド生成 14 set str_result to exec_perl(command) of me 15 return evalResult(str_result) of me 16 end regex_match 17 18 --★targetをregexで置換 19 on regex_replace(regex, target) 20 set command to "$target = q/" & target & "/; $target =~ s" & regex & "; print $target;" --※引数を使用してperlコマンド生成 21 set str_result to exec_perl(command) of me 22 return str_result 23 end regex_replace 24 25 --★commandをperlで実行 26 on exec_perl(command) 27 set one_liner to "perl -e '" & command & "'" as Unicode text 28 try 29 set str_result to do shell script one_liner --※shell実行 30 on error 31 set str_result to "syntax error : " & one_liner --perlがエラーを吐いたとき 32 end try 33 return str_result 34 end exec_perl 35 36 --★結果がtrueかfalseかerrorか判断 37 on evalResult(str_result) 38 if str_result is "1" then 39 return true 40 else if str_result begins with "syntax error : " then 41 return str_result 42 else 43 return false 44 end if 45 end evalResult 46 47end script

(参考URL:http://piyocast.com/as/archives/2065)

投稿2017/03/21 01:04

ideal742

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

行頭だけであれば、+ではなく*にすれば良いかと。

sed でも動作します。

sed

1> cat txt 2●●●●●●●● 3 ●●●● ●●●● 4●●●●●●●●●●●●●●●●●●●●●●●●●●●●● 5●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● 6 7> export LANG=C 8> sed -e 's/^ *//g' txt 9●●●●●●●● 10●●●● ●●●● 11●●●●●●●●●●●●●●●●●●●●●●●●●●●●● 12●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● 13 14> cat txt | perl -pe 's/^ *//g' 15●●●●●●●● 16●●●● ●●●● 17●●●●●●●●●●●●●●●●●●●●●●●●●●●●● 18●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● 19

投稿2017/03/06 10:09

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ideal742

2017/03/07 02:37

t_obaraさま 返答ありがとうございました。 私の知識不足かと思うのですが、 提案いただいた2点うまく動作させる事ができませんでした。 試したコードは ------------------------------ set "対象のテキストファイルパス" to myFilePath do shell script "export LANG=C | sed -e 's/^ *//g' | cat " & myFilePath do shell script "export LANG='ja_JP,UTF-8'" と do shell script "cat " & myFilePath & "| perl -pe 's/^ *//g' | cat " & myFilePath ------------------------------ です。 sedはじめて知りました。 ありがとうございます。
t_obara

2017/03/07 03:03

うまくいかないのであれば、どのようにうまくいかないのか提示いただいた方が良いかと思います。 set 構文が間違えています。 スペース部分が全角スペースになっています。 後ろにあるcatがおかしい
ideal742

2017/03/08 02:10

t_obaraさま いつもお世話になっております。 > set 構文が間違えています。 失礼いたしました。正しくは set myFilePath to "対象のテキストファイルパス" ですね。 >スペース部分が全角スペースになっています。 正規表現の検索部分ということでですかね? 検索したい部分は全角スペースなのですが、全角スペースをそのままいれてしまうのは まずいということでしょうか(゚ー゚; >後ろにあるcatがおかしい そのご指摘をふまえ下記のようにしてみました。 (perlをsedに変更。オプションを"-e"に変更。) (検索部分を{全角スペース > \\s}に変更。) (cat削除し">"を追加) do shell script "cat " & myFilePath & "| sed -e 's/^\\s*//g' > " & myFilePath (参考URL:https://hydrocul.github.io/wiki/commands/sed.html) 上記を実行したところ、テキストファイルが空になってしまいます。 未熟な私にご指摘、本当に感謝しております。 ご面倒をおかけしておりますが、お付き合いいただければ助かります。
ideal742

2017/03/08 02:17

追伸: 上書きではなく do shell script "cat " & myFilePath & "| sed -e 's/^\\s*//g' > "新しいファイルパス" とすると、ファイルは空にはならなかったのですが、期待した処理ではなく ●●●●●●●●●●●●●●●         ●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● という風に、処理されずに書き出されました。
t_obara

2017/03/08 02:43

なるほど、元々ファイルの内容が全角スペースなのですね。 その場合、sedのスクリプトを変更する必要がありますね。 s/^[ ]*//g となります。
ideal742

2017/03/16 02:17

t_obataさま お世話になっております。 最近少々立て込んでおりまして、なかなか本件に取り組めずにおります。 お付き合いいただき重ね重ね御礼申し上げます。
ideal742

2017/03/21 01:05 編集

t_obataさま お世話になっております。 s/^[ ]*//g など、色々ためしてみたのですが狙った処理うまく反映されず行頭の全角スペースが残ってしまいました。 どうも、先頭をあらわす "^" がうまく機能していないような感じであります。 なにか理由があるかとは思いますが、 今回は上記『自己解決』欄に記載いたします方法にて処理いたしました。 お手数おかけし、また新たな知見ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問