VimでHTMLを自動インデントする方法

以下のコマンドを実行してみて下さい。

%s/></>\r</g | filetype indent on | setf xml | normal gg=G

Vimのコマンドウィンドウを活用しよう

 

コマンド履歴のコマンドウィンドウを表示

q:

コマンドウィンドウが開くと通常のコマンドモード時の操作が可能になります。

カーソルを再実行したい行に移動してEnterを押下すると再実行されます。

検索履歴のコマンドウィンドウを表示

q/
または、
q?

カーソルを再検索したい行に移動してEnterを押下すると再検索されます。

コマンドウィンドウを閉じる

:q

便利なので、是非、試してみて下さい。

Pokuda Searchの検索機能の仕様

●検索条件1
ファイル名が「稟議」に部分一致するファイル。(ワイルドカード"*稟議*"の検索と同じ。)
または、
ファイル内の文章の転置インデックスに「稟議」を含むファイル。 


●検索条件2
ファイル名が「稟議決裁」に部分一致するファイル。(ワイルドカード"*稟議決裁*"の検索と同じ。)
または、B)
ファイル内の文章の転置インデックスに「稟議」または、「決裁」を含むファイル。 B)


●検索条件3
ファイル名が「稟議 決裁」に部分一致するファイル。(ワイルドカード"*稟議 決裁*"の検索と同じ。)
または、
ファイル内の文章の転置インデックスに「稟議」または、「決裁」を含むファイル。 


●検索条件4
ファイル名が「稟議 決裁」に部分一致するファイル。(ワイルドカード"*稟議 決裁*"の検索と同じ。)
または、
ファイル内の文章の転置インデックスに「稟議」または、「決裁」を含むファイル。 
上記に合致するファイルかつ、
拡張子が「pdf」(大文字小文字を区別しない)に部分一致するファイル。


●検索条件5
ファイル名が「稟議 決裁」に部分一致するファイル。(ワイルドカード"*稟議 決裁*"の検索と同じ。)
または、
ファイル内の文章の転置インデックスに「稟議」または、「決裁」を含むファイル。 
上記に合致するファイルかつ、
拡張子が「pdf」(大文字小文字を区別しない)に部分一致するファイル。
上記に合致するファイルかつ、
ファイル更新日が「2018/06/22 14:17:42」以上のファイル。


●検索条件6
ファイル名が「稟議 決裁」に部分一致するファイル。(ワイルドカード"*稟議 決裁*"の検索と同じ。)
または、
ファイル内の文章の転置インデックスに「稟議」または、「決裁」を含むファイル。 
上記に合致するファイルかつ、
拡張子が「pdf」(大文字小文字を区別しない)に部分一致するファイル。
上記に合致するファイルかつ、
ファイル更新日が「2018/06/22 14:17:42」以上、かつ、「2019/04/10 16:24:17」以下のファイル。


●具体的なマッチング例
No. ファイル名 拡張子 更新日 ファイル内の文章 条件1 条件2 条件3 条件4 条件5 条件6
1 kessai.html html 2019/4/10 16:00:00 権限について。
2 稟議決裁1.docx docx 2019/4/10 16:00:00 規定の説明。
3 稟議 決裁1.docx docx 2019/4/10 16:00:00 規定の説明。
4 稟議規定1.docx docx 2019/4/10 16:00:00 規定の説明。
5 細則.docx docx 2019/4/10 16:00:00 仕事の管理単位と稟議
6 細則1.pdf pdf 2018/6/22 14:17:41 決裁権限
7 細則2.pdf pdf 2018/6/22 14:17:42 決裁権限
8 細則3.pdf pdf 2019/4/10 16:24:17 決裁権限
9 細則4.pdf pdf 2019/4/10 16:24:18 決裁権限

TikaOnDotnetでファイル内の文字列を抽出する方法

 以下のSampleのとおり、TextExtractor.Extract()メソッドで、ファイル内の文字列を取得できます。

※Shift-Jisのテキストファイル(.txt)は、UTF-8に変換しないと抽出に失敗するので要注意。

public void TikaExtractorTest() {
    var txtExtractor = new TextExtractor();

    var path = @"C:\Temp\Test.xlsx";
    var content = txtExtractor.Extract(path);

    Debug.WriteLine(content.Text);
}

C#で文字コードを自動判定する方法

 以下のSampleのとおり、ReadJEnc.JP.GetEncoding()メソッドで文字コードを自動判定することができます。

実装例

public void DetectingEncodeTest() {
    var path = @"C:\Temp\Test.txt";

    byte[] bytes = null;
    using (var fs = new FileStream(path, FileMode.Open)) {
        bytes = new byte[fs.Length];
        fs.Read(bytes, 0, bytes.Length);
    }
    string str = null;
    var encode = ReadJEnc.JP.GetEncoding(bytes, bytes.Length, out str);

    Debug.WriteLine(encode.ToString());
}

実行結果

ShiftJIS

FlexLuceneで日付フィルタリングを実現する方法

 ポイントは、以下の2点です。

  • ドキュメントの日付を、同一フィールド名でLongPointとStoredFieldを使って登録する。(17行目付近)
  • 検索時にLongPoint.NewRangeQueryを使って、絞込みを行う点です。(32行目)

実装例

public void LongPointTest() {
    var analyzer = new WhitespaceAnalyzer();
    var iwc = new IndexWriterConfig(analyzer);

    iwc.SetOpenMode(IndexWriterConfigOpenMode.CREATE);

    //テスト用インデックス作成---------------------------------------------
    DateTime baseDate = DateTime.Parse("2020/07/16 08:00:00");
    var ram = new RAMDirectory();
    var writer = new IndexWriter(ram, iwc);
    try {
        for (int i = 0; i < 10; i++) {
            var doc = new Document();
            doc.Add(new TextField("text", "hoge foo", FieldStore.YES));
            DateTime tmp = baseDate.AddDays(i);
            long l = long.Parse(tmp.ToString("yyyyMMddHHmmss"));
            //日付文字列をlong値で保持
            doc.Add(new LongPoint("date", l));
            //long値をストアするには、同じフィールド名でStoredFieldとして指定する必要がある。
            doc.Add(new StoredField("date", l));

            writer.AddDocument(doc);
        }
        
    } finally {
        writer.Close();
    }

    //検索------------------------------------------------------------
    TermQuery tq = new TermQuery(new Term("text", "foo"));
    //日付範囲の条件
    Query rq = LongPoint.NewRangeQuery("date", 20200717000000, 20200719000000);

    BooleanQueryBuilder b = new BooleanQueryBuilder();
    b.Add(tq, BooleanClauseOccur.MUST); //AND条件
    b.Add(rq, BooleanClauseOccur.FILTER); //AND条件(スコアリングに関与しない)
    Query q = b.Build();

    DirectoryReader dr = DirectoryReader.Open(ram);
    IndexSearcher searcher = new IndexSearcher(dr);
    ScoreDoc[] hits = searcher.Search(q, 100).ScoreDocs;
    for (int i = 0; i < hits.Length; i++) {
        var doc = searcher.Doc(hits[i].Doc);
        Debug.WriteLine(DateTime.ParseExact(doc.Get("date"), "yyyyMMddHHmmss", null));
    }
}

検索結果

2020/07/17 8:00:00
2020/07/18 8:00:00

厳選 Visual Studioの便利なショートカット

  エラー箇所にジャンプ 「Ctrl + Shift + F12」 ブレークポイント 設定/解除 「F9」 有効化/無効化 「Ctrl + F9」 ViEmu特有 「:ls」:バッファナンバーのリストを表示。 「:b2」:バッファ2のファイルを開く。 「:n」:次のバッファのファ...