投稿者 るきお  (社会人) 投稿日時 2011/2/14 22:53:50
ソースコードからコメントを取り除くのは実は難しいです。
95%の単純なコメントは苦も無く取り去ることができますが、やっかいなパターンがあります。
C言語でいうと、次のような行のコメントだけ取り除くロジックが書けますか?
string str = "//はコメントの始まりです。" //""//""


\でクォーテーションがエスケープされているケースもあります。
さらに、今回はC言語ということですから対象外かもしれませんがC#を考えると、@"…"のケースやXMLコメントのケースなど考慮すべきことがたくさんあります。


という困難な状況はひとまず置いておいて95%の単純なコメントを除去するプログラムです。
改行の位置を自分で調べるのではなく、最初から1行ずつ読んできたほうが楽です。
なので、修正というかほとんど作り変えてしまいました。

  
Dim sjis As System.Text.Encoding = System.Text.Encoding.GetEncoding("shift_jis")
Dim reader As New IO.StreamReader("C:\test\test.txt", sjis)
Dim writer As New IO.StreamWriter("C:\test\result.txt"False, sjis)

Do Until reader.EndOfStream

    '対象から1行読む 
    Dim sourceLine As String = reader.ReadLine

    '//の位置を取得 
    Dim pos As Integer = sourceLine.IndexOf("//")

    Dim targetLine As String
    If pos >= 0 Then
        '//が存在するならば、そこまでの文字列を切り抜く。 
        targetLine = sourceLine.Substring(0, pos)
    Else
        '//が存在しないならば、読み込んだ行全体が書き込む対象となる。 
        targetLine = sourceLine
    End If

    '書き込み 
    writer.WriteLine(targetLine)
Loop

reader.Close()
reader.Dispose()

writer.Close()
writer.Dispose()