VB.NETでファイルの行数を取得する

基本的な処理ですが、なぜか逆引き本などにも載っていないようなので、私が使っているものをアップしておきます。
テキストファイルの内容を改行で分割した配列に変換して、その配列の長さから行数を求めています。
テキストファイルの内容をすべて変数に取り込むため、巨大なテキストを扱うには向かないかもしれません。
とりあえず1万行程度のテキストでは速度面でも問題ないようです。

'ファイルの行数を取得(ファイルが存在しないかエラーの場合は-1を返す)
Public Function CountLine(ByVal fileNamePath As String) As Integer
  Dim textFile As IO.StreamReader
  Dim text As String
  If IO.File.Exists(fileNamePath) = False Then
    CountLine = -1
    Exit Function
  End If
  textFile = Nothing
  Try
    textFile = IO.File.OpenText(fileNamePath)
    text = textFile.ReadToEnd
    CountLine = text.Split(vbCrLf).Length
    '末尾の改行はカウントしない
    If text.EndsWith(vbCrLf) Then
      CountLine = CountLine - 1
    End If
  Catch ex As Exception
    CountLine = -1
  Finally
    If textFile IsNot Nothing Then
      textFile.Close()
    End If
  End Try
End Function


VB.NETで全角英数字のみを半角にする

VB.NETで文字列中の全角文字を半角にしたい場合は、通常StrConv関数を使いますが、文字の種類を指定して変換することはできません。
カタカナだけ半角にしたくないという場合もよくありますので、そのような動作をする関数を作ってみました。

'Imports System.Text.RegularExpressions をソース先頭のImports部分に追加
'
'全角英数字を半角にする
Private Function WideAlphaNumToNarrow(ByVal inString As String) As String
  Dim r As Regex
  Dim mev As MatchEvaluator
  '半角にしたい文字を正規表現で指定
  r = New Regex("[0-9]+|[a-z]+|[A-Z]+|,|.")
  mev = New MatchEvaluator(AddressOf ToNarrow)
  WideAlphaNumToNarrow = r.Replace(inString, mev)
End Function
'
'WideAlphaNumToNarrow用のデリゲートメソッド
Private Shared Function ToNarrow(ByVal m As Match) As String
  ToNarrow = StrConv(m.ToString, VbStrConv.Narrow)
End Function

この関数では全角英数字とカンマ、ピリオドのみ半角にします。
対象文字を変更したい場合は正規表現部分を適当に修正してください。
MatchEvaluatorの利用に関してはこちらを参考にさせていただきました。


できるかな?原稿スキャン画像の自動傾き補正

ある知り合いのところで、スキャンした原稿の画像の傾きを直すのに一つ一つ画像処理ソフトで回転させているのを見て、「なんとかならんかな~」と思いまして、いいユーティリティなどないかと探してみたのですが、どうも自動でやってくれるものは見当たりませんでした。スキャナのオマケOCRにもついている機能なんですが、単独機能となると商用で結構コストのかかるものしかなかったり…

というわけで、別に頼まれたわけではないのですが、ヒマでしたのでせっかくだから作ってみることにしました。

・・・・ハマりました _| ̄|○ たいしたアルゴリズムでもないんですけど…

で、これまでの成果物として「傾き補正くんテスト版」とやらを作ってみました。↓こんな感じ

傾き補正くんウインドウイメージ

別にいかがわしい画像を開いているわけではありません。それとネーミングセンスに関してはおやぢなので仕方がないのです。 

せっかくだからUPしますので、興味のある方は下のリンクからダウンロードしてみてください。あらかじめ言っておきますが検出精度は市販ソフトには遠く及びませんのであしからず。

傾き自動補正くんテスト版

モノクロ限定のくせに、力押しのアルゴリズムかつVB.NETで作ったのでハッキリ言ってかなり遅いのですが、そのおかげでJPEGとTIFFに対応しています。現状では実用的とは言い難いですが、まあこれからのんびりと改良していこうかとも思ってます。

※マルチページTIFFには対応しておりません。上書きしてデータを失ってしまわぬようご注意願います。

また、画像の回転部分に関してはこちらのサンプルを画像の物理サイズ(解像度)に対応するよう少々変更して利用させていただきました。画像の物理サイズに関しての詳細にはこちらが参考になります。


    サイト内検索

    プロフィール

  • 顔絵
  • kotani(こたに)

    30台後半になって突然脱サラ。フリーのスクリプト系プログラマーとして独立を目論む謎のおやぢ。東京都在住。趣味は古本屋巡り、文具いぢり、機械いぢり、B級グルメ探索等々多岐にわたる。PCを使う作業に関しては何でもかんでも自動化したがる自動化オタク。