1

Applescript:テキストファイル内の重複を削除する

作成した.txtファイルがあり、重複している特定のテキスト行を削除しようとしています。

私がファイルに付けた名前は、デスクトップにあるtoday.txtで、NYtimesToday'sPaperのURLのリストが含まれています。ただし、htmlファイルを解析すると、次のように重複するURLがいくつか届きます。

http://www.nytimes.com/2012/07/06/education/no-child-left-behind-whittled-down-under-obama.html
http://www.nytimes.com/2012/07/06/business/global/markets-look-to-europes-central-bank-for-action.html
http://www.nytimes.com/2012/07/06/business/global/markets-look-to-europes-central-bank-for-action.html
http://www.nytimes.com/2012/07/06/nyregion/3-children-killed-in-long-island-boating-accident.html
http://www.nytimes.com/2012/07/06/nyregion/3-children-killed-in-long-island-boating-accident.html
http://www.nytimes.com/2012/07/06/world/americas/earthquake-relief-where-haiti-wasnt-broken.html
http://www.nytimes.com/2012/07/06/world/americas/earthquake-relief-where-haiti-wasnt-broken.html
http://www.nytimes.com/2012/07/06/us/politics/journal-critique-of-romney-shows-murdoch-doubt-on-candidacy.html
http://www.nytimes.com/2012/07/06/us/politics/journal-critique-of-romney-shows-murdoch-doubt-on-candidacy.html
http://www.nytimes.com/2012/07/06/technology/at-hacker-hostels-living-on-the-cheap-and-dreaming-of-digital-glory.html
http://www.nytimes.com/2012/07/06/technology/at-hacker-hostels-living-on-the-cheap-and-dreaming-of-digital-glory.html

Applescriptのdoshellスクリプトを使用して重複を削除しようとしましたが、機能させることができませんでした。これが私のコードです:

set delDups to do shell script "sort /Users/paolob/Desktop/today.txt | uniq -u"
return delDups

だから私の質問:today.txtファイルの重複を削除して結果を同じtoday.txtファイルに保存するにはどうすればよいですか?

どんな助けでも大歓迎です。前もって感謝します。

編集
実際にシェルスクリプト、またはあなたが提案する重複した削除者がApplescript Editorでテキストを直接読み取り、新しいテキストを* new_text *変数に設定すると、より経済的で高速になります。

4

3 に答える 3

3

これを試して...

set filePath to (path to desktop as text) & "today.txt"
set theText to read file filePath
set textList to paragraphs of theText

set uniqueList to {}
repeat with i from 1 to count of textList
    set thisParagraph to item i of textList
    if thisParagraph is not in uniqueList then set end of uniqueList to thisParagraph
end repeat

set {tids, text item delimiters} to {text item delimiters, return}
set uniqueText to uniqueList as text
set text item delimiters to tids

set openFile to open for access file filePath with write permission
set eof of openFile to 0
write uniqueText to openFile starting at eof as text
close access openFile
于 2012-07-06T14:25:20.350 に答える
1

これは、シェル スクリプトのみを使用して実行できます。より大きなプログラムの一部でない限り、AppleScript は本当に必要ありません。

以下は、一意性をソートして強制し、同じファイルに保存します。

sort -u -o /Users/paolob/Desktop/today.txt /Users/paolob/Desktop/today.txt

これは次のようにapplescriptでラップできます:

do shell script "sort -u -o /Users/paolob/Desktop/today.txt /Users/paolob/Desktop/today.txt"

手作業でさらに処理を行いたい場合は、次のようなものが機能します。

set myText to do shell script "sort -u /Users/paolob/Desktop/today.txt"
于 2012-07-06T14:32:00.227 に答える
0

これはルビーで行うことができます。ファイルのあるフォルダーのターミナルから「irb」を開き、対話型シェルで次の操作を行います。

file = File.new("test.txt", 'r') #これにより、"test.txt" が開きます (独自のファイル名に置き換えてください)

array = [] # 新しい配列を作成します。

file.lines.each{|k| array << k.to_s} #ファイルの行を配列に入れる

array.uniq! #これらの行を一意にする

File.open("outfile.txt", "w"){|ファイル| s = 文字列.new(); array.each{|k| s << k}; file.puts(s)} # ファイル (outfile.txt) を作成し、一意の行をファイルに書き込みます

exit #irbを閉じる

于 2012-07-06T14:40:14.150 に答える