2017-12-01 4 views
-2

テキストファイル内の重複行を削除しますテキストファイル(テキストがすでにソートされているので、ソート部分をスキップすることができます)私の周り探しますが、下の全体的なタスクを実行するいくつかの自動スクリプトを取得することができなかった

3)からテキストファイル残念ながら

を上書き&を保存し、すべての結果は、私は1つのだけ、特定のファイルから行を削除するために検索し、別のファイル名で保存します。

次に、このスクリプトを実行するスケジュールタスクを設定します。

私はスクリプトに関する知識がなく、バッチスクリプトのセットアップに関する経験はほとんどありません。あなたの助けとガイドは非常に高く評価されます。

+0

ここに来る前に、おそらく研究をしておくべきでしょう。これは契約の仕事を求める場所ではありません。 –

+0

あなたは何をしたいのか作成するスクリプトを購入しようとしていますか?もしそうなら、私たちにあなたが使っている言語を知らせて、それを手伝ってくれるいくつかのコードを投稿してください。 – EasyE

答えて

0

残念ながら、特定のファイルから行を削除し、別のファイル名として保存するために検索したすべての結果です。

ここにあなたの答えがあると思います。私はどの言語を書いているのか分かりませんが、このシナリオでは通常、私は何かをするでしょう。

  1. ファイルを開く
  2. 読むライン
  3. ソートラインファイルBとして
  4. 削除重複行
  5. 保存
  6. 閉じるファイル
  7. 名前の変更ファイルA _backupするか、不要な(_original 、データ紛失防止のための安全なガード)
  8. ファイルBをファイルAにリネームする

もう一度、あなたはどの言語を書いているのかわかりません。それ以上の質問には、ここでは詳細が十分ではありません。

しかし、重要なポイントは、元のファイルを単に削除し、新しいファイルの名前を元の名前に変更することです。

+0

不明な質問から、私は彼がテキストファイルを見つけるために最初にディレクトリを再帰的に横断したいと思います。 – EasyE

+0

それは良い点です。私は明らかに誰もがループ文を書く方法を知っていると仮定し、私はその重要な点を見逃したようです。正直なところ私はなぜこの質問に答えようとしたのか分からない... – Slacker

0

私はGoLangの小さなスクリプトを書いてコメントしました。実行方法がわかっていると助けになるかもしれません。そうでない場合、迅速な調査があなたを助けます。

package main 

import (
    "io/ioutil" 
    "strings" 
    "log" 
    "os" 
) 

func main() { 
    // get all files in directory 
    files, err := ioutil.ReadDir(".") 
    // check error 
    if err != nil { log.Println(err) } 
    // go through all the files 
    for _, file := range files { 
     // check if it's a txt file (can change this) 
     if strings.HasSuffix(file.Name(), "txt") { // you can change this 
      // read the lines 
      line, _ := ioutil.ReadFile(file.Name()) 
      // turn the byte slice into string format 
      strLine := string(line) 
      // split the lines by a space, can also change this 
      lines := strings.Split(strLine, " ") 
      // remove the duplicates from lines slice (from func we created) 
      RemoveDuplicates(&lines) 
      // get the actual file 
      f, err := os.OpenFile(file.Name(), os.O_APPEND|os.O_WRONLY, 0600) 
      // err check 
      if err != nil { log.Println(err) } 
      // delete old one 
      os.Remove(file.Name()) 
      // create it again 
      os.Create(file.Name()) 
      // go through your lines 
      for e := range lines { 
       // write to the file without the duplicates 
       f.Write([]byte(lines[e] +" ")) // added a space here, but you can change this 
      } 
      // close file 
      f.Close() 
     } 
    } 
} 

func RemoveDuplicates(lines *[]string) { 
    found := make(map[string]bool) 
    j := 0 
    for i, x := range *lines { 
     if !found[x] { 
      found[x] = true 
      (*lines)[j] = (*lines)[i] 
      j++ 
     } 
    } 
    *lines = (*lines)[:j] 
} 

あなたのファイル:hello hello yes no 返される結果:hello yes no

あなたはすべてのファイルとディレクトリにこのプログラムを実行する場合、それは重複を削除します。

あなたのニーズに合っていますか?

関連する問題