
Applescriptを始めたばかりの初心者です。
テキストファイルを読み込んで、検索置換を行うスクリプトを作成してます。
検索置換まではなんとかできたのですが、ファイルを同じ場所に同じ名前で上書きしたいのですが、うまくいきません。見よう見まねで作成しているので、エラーがでても対処できませんでした。
どうかアドバイスをお願いします。
set thefile to "■■HD:0000:0000.txt"--いつも同じファイルを読み込む
try
set fn to open for access file thefile with write permission
set mystr to read fn -- 全ての内容を得る
end try
display dialog mystr--内容の確認
set mystr to my replaceAll(mystr, "▼", return)
display dialog mystr--内容の確認
write mystr to fn
close access fn
on replaceAll(motoStr, findStr, repStr)
set OriginalDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to {findStr}
set motoStr to text items of motoStr
set AppleScript's text item delimiters to {repStr}
set motoStr to motoStr as string
set AppleScript's text item delimiters to OriginalDelimiters
return motoStr
end replaceAll
No.1ベストアンサー
- 回答日時:
read、writeするとき、かならず読み書きを失敗したときの処理を行うようにしてください。
おそらくうまくいかないのは、エラーが起きて失敗したあとに再度試行するときに、ファイルが閉じられていないからだと思われます。エラーが起きても、ファイルを閉じるようにします。
読み込み:
try
set fn to open for access file thefile with write permission
set mystr to read fn -- 全ての内容を得る
on error
close access fn
return
end try
書き込み:
try
write mystr to fn
on error
close access fn
return
end try
close access fn
また、readでは、どこまで読み込むか明示しないと、うまく読み込めないようです。
set mystr to read fn for (get eof fn) -- 最初からEOFまで読み込む
writeでは、置換前の文字数より、置換後の文字数が減った場合、最後に置換前のゴミが残ってしまうので、EOFを書き込むようにしましょう。
write mystr to fn
set eof fn to (length of mystr + 1)
この回答への補足
最初うまくいかずいろいろ試したところ
下記の部分を
write mystr to fn
set eof fn to (length of mystr + 1)
修正後
set eof fn to 0
write mystr to fn
としたところうまく動作しました。
harawoさんありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) Excel・ユーザーフォームの情報を受け渡したい 4 2022/06/08 10:11
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドラインスイッチ -pe 's...
-
VBA 置換文字がみつからない時
-
○文字目に文字挿入
-
転置行列への変換が分かりません。
-
csvデータ ダブルクォーテ...
-
perlで置換をするプログラムを...
-
Replace関数 大文字小文字を区...
-
マッチする部分を除いたものが...
-
文字列中に&を含んだパラメー...
-
VBAを使って条件により、文字列...
-
C#で空白行を削除する方法
-
Excel VBA リストに一致したデ...
-
VBscriptで「改行」と「"」を置...
-
配列を対象にして正規表現の置...
-
CSVファイルの中で、「 , 」カ...
-
住宅にカナを入力する際に丁目...
-
エクセルで数値を全角文字(カ...
-
IEからEdgeへの移行に伴うIMEの...
-
マッチングアプリで新しくアカ...
-
文字コードの%E3%80%とは何です...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 置換文字がみつからない時
-
正規表現で、特定の文字列を含...
-
csvデータ ダブルクォーテ...
-
各項目がダブルクォーテーショ...
-
Excel VBA リストに一致したデ...
-
スペースで区切られた氏名から...
-
秀丸エディタで、「-」や「ー」...
-
EXCELマクロを用いてグラフの系...
-
csvデータのダブルクォーテーシ...
-
C#で空白行を削除する方法
-
EXCEL警告「置換対象のデータが...
-
xmlファイル内の文字列置換
-
正規表現 特定の文字列を含む行...
-
テキストボックスの文字列を置...
-
○文字目に文字挿入
-
C言語でテキストファイルの内容...
-
複数のパワーポイントファイル...
-
c# ビルド直前にコードを置換で...
-
Excel・ユーザーフォームの情報...
-
\\(円)記号を置換したい
おすすめ情報