0

不適切な形式の負の数値を含むダーティ レポート ファイルがあります。最終的な目標は、分析のためにこれらを Excel にインポートすることです。Excel にインポートする前に、BBEdit を使用してレポートをクリーンアップしています。レポートをループして "-" を番号の後ろから前に移動する Apple スクリプトを作成したいと思います。

ダーティ レポートの例の行:

B-EXCAL 02 3684        2.0000-      49.02-       108.00-        58.98-  54.6-
B-MISMH 09-3300       33.0000      722.91       1353.00        630.09   46.6 

望ましい出力:

B-EXCAL 02 3684       -2.0000      -49.02       -108.00        -58.98  -54.6
B-MISMH 09-3300       33.0000      722.91       1353.00        630.09   46.6 

私は JavaScript と VBScript の経験があるので、次の疑似スクリプトのように動作するスクリプトをイメージしています。

Get contents of current window from BBEdit
   for each word in contents
       if char(len(word)) = "-"
           newWord = "-" + rightTrim(word, 1) 
           replace(word, newWord)
       end if
   end for
end

AppleScript を使用するのはこれが初めてで、完全に途方に暮れています。

助けてくれてありがとう/

4

2 に答える 2

1

AppleScript が必要かどうかわかりません。BBEdit の検索/置換ウィンドウはこれで機能しますか? 次のことを試してください。

検索: ([0-9\.]+)\-
置換: \-\1

「置換」テキスト領域の下で選択されるのは、「grep」と「ラップアラウンド」だけです。次に、「すべて置換」をクリックします。

一度に多数のレポートに対して実行する必要がある場合は、複数ファイル検索で同じ検索/置換パターンを使用します。私があなたの質問を正しく理解していない場合はお知らせください。ただし、AppleScript がなくてもこれを行うことができると思います。

于 2012-01-06T01:25:53.807 に答える
0

これを試して。bbedit (またはどこでも) から変数「originalText」として AppleScript にテキストを取得できると仮定しています。次に、「fixedText」をそれが属する場所に戻す必要があります。注: 私のコードでは、Michael J. Barber が現在フォーマットしているため、「タブ」文字が origText の各行の単語/列を区切っていると想定しています。それが別の文字 (スペース文字など) である場合は、コード内の単語タブをスペースに変更する必要があります。

set originalText to "B-EXCAL 02 3684    2.0000- 49.02-  108.00- 58.98-  54.6-
B-MISMH 09-3300 33.0000 722.91  1353.00 630.09  46.6"
set fixedText to fixNegativeSigns(originalText)

on fixNegativeSigns(theText)
    set listText to paragraphs of theText
    set fixedText to ""

    set {tids, text item delimiters} to {text item delimiters, tab}
    repeat with i from 1 to count of listText
        set listItems to {}
        set thisList to text items of (item i of listText)
        repeat with j from 1 to count of thisList
            set thisItem to item j of thisList
            if text -1 of thisItem is "-" then
                set thisItem to "-" & text 1 thru -2 of thisItem
            end if
            set end of listItems to thisItem
        end repeat
        set fixedText to fixedText & (listItems as text) & character id 10
    end repeat
    set text item delimiters to tids
    return text 1 thru -2 of fixedText
end fixNegativeSigns

注:上記のコードをテストするときは、コピーして Applescript エディターに貼り付ける必要があります。タブ文字はコピー/貼り付けに耐えられないため、originalTextのタブ文字を修正する必要があります。したがって、単語/列の間のスペースを削除し、タブを挿入します。その後、コードは正しく機能します。

于 2011-09-23T05:03:38.663 に答える