アプリ版:「スタンプのみでお礼する」機能のリリースについて

WindowsXP環境でtsvファイルを扱いたいのですが、
このtsvファイルが改行無く出力されています。
このファイルに改行を入れたいと思っています。

【例】
(現状)
AAA   100   6   BBB   200   5   CCC   150   4   ・・・

(結果)3つめのタブを改行に変更したい。
AAA   100   6
BBB   200   5
CCC   150   4



新規ソフトウェアのインストールやフリーソフトを導入できない端末なので、
VBScriptで実現できないかと思っているのですが、なかなかうまくいきません。

どなたかお知恵を拝借いただけませんか?
よろしくお願いします。

A 回答 (5件)

とりあえずこういうスクリプトですね。



Dim FSO
Dim InFile
Dim OutFile
Dim Text, Char, Count
Set FSO = CreateObject("Scripting.FileSystemObject")
Set InFile = FSO.OpenTextFile("C:\~", 1)
Set OutFile = FSO.CreateTextFile("C:\~", True)
Do Until InFile.AtEndOfStream
    Count = 0
    Text = ""
    Do Until InFile.AtEndOfStream
        Char = InFile.Read(1)
        If Char = vbTab Then
            Count = Count + 1
            If Count = 3 Then Exit Do
        End If
        Text = Text & Char
    Loop
    OutFile.WriteLine Text
Loop
OutFile.Close
InFile.Close

※ファイル名は適当に変更してください。
※インデントに漢字空白を使用しています。
 コピペ注意
    • good
    • 0
この回答へのお礼

実現できました!
非常に素早いご教授ありがとうございます。

お礼日時:2011/02/22 20:49

tsvファイルが複数行有るのか解らなかったけど、取りあえず複数行あってもいい様にしてみました。


例ではc:\test.tsvを整形した物をc:\test2.tsvに出力しています。


Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile = fso.OpenTextFile("c:\test.tsv")
Set outFile = fso.CreateTextFile("c:\test2.tsv")

Do Until inFile.AtEndOfStream
  nTab = 0
  tempLine = inFile.ReadLine
  For i = 1 To Len(tempLine)
    one = Mid(tempLine, i, 1)
    If one = vbTab Then
    
      nTab = nTab + 1
      If nTab >= 3 Then
        one = vbCrLf
        nTab = 0
      End If
    End If
    outFile.Write one
  Next
  outFile.Write vbCrLf
Loop
  
inFile.Close
outFile.Close
    • good
    • 0
この回答へのお礼

実現できました。
ありがとうございました。

お礼日時:2011/02/22 20:55

文字列ストリームを変数に読み込み、Instr(VBScriptの関数にもあり、VB(A)と同じ)でTABコード(水平タブ,多分Chr(9))


を見つけ、3個目ごとにvbCrlLf に置き換えていけば良いはず。
Instr関数は第1引数に開始位置を指定できるので、尺取り虫的に、開始位置をずらしては。Instr関数をかける。見つかった場所に次の文字が探索開始場所にする。
TABコードは、VBScriptでもvbTabが使えるはず。
>、なかなかうまくいきません。
質問者が使用経験がすくないだけでは。
データ例を作っても、質問者の場合と同じかどうか判らないので、コードはここでは省略する。
16進表示でデータの一部でも挙げれば情況がわかるが。
    • good
    • 0
この回答へのお礼

> 質問者が使用経験がすくないだけでは。
お察しの通りです。この件で初めてVBScriptに触れました。
今後も勉強します。ありがとうございました。

お礼日時:2011/02/22 20:54

>3つめのタブを



改行コードよりは悩みどころでは?。

改行はCRLF、ここではVBCRLFか。
CRとLF、CRはCHR(13)でLFはCHR(10)です。
よってCHR(13)&CHR(10)。

TABはCHR(9)
CHR(9)を変数xに格納して、INSTRで3つめを見つける。

そんなところか・・・。
    • good
    • 0
この回答へのお礼

参考になりました。
ご回答ありがとうございます。

お礼日時:2011/02/22 20:50

CHR関数だったかな文字コードを直接指定して改行を出してあげればいけるはずですよ



WScript.Echo "こそこそ" & CHR(13) & CHR(10) & "ごにょごにょ"
    • good
    • 0
この回答へのお礼

参考になりました。
ご回答ありがとうございます。

お礼日時:2011/02/22 20:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!