VBSでテキストファイルを1行ずつ読み、ある桁からある項目A(20桁)が始まるとします。
項目Aは漢字が入ります。後ろ空白(1バイト空白)詰めです。
その項目Aの桁数を調べるにはどのようにVBSを組めばよいのでしょうか?
VBSでMid関数とかLen関数を使ってもうまく計算してくれてないような感じなのです。
例えば
桁 →123456789012345678901234567890
data1→aaaaaaaaaこんばんわ
data2→aaaaaaaaaおつかれ
で
strRec1 = Mid(strRecord,10,20)
とした場合、stRec1には項目Aが入る予定
data1なら5、data2なら4と返ってきてほしいのです。
ちなみにMidBでもそれぞれ10,8で返ってきてもいいです。
言い換えると、桁n~桁mまでの項目に何桁の漢字があるかを調べたいです。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
SJIS(ASCII)としてカウント(半角1バイト、全角2バイト)で
文字列を取りたいということでしょうか?
上記の例でいくと、「data1→aaaaaaaaaこんばんわ 」の長さは
20というバイト数(桁数ではありません)が帰ってくれば
OKということですよね?(Lenだと15が帰ってくるから)
もし、そうであれば、下記のようなバイト数を取得する
コードを組まなければなりません。
(半角=1バイト、全角=2バイト)
理由:Lenは桁数を読み込んでしまうので、バイトはカウントしません。また、LenBという関数があるんですが、UNICODEでの計算になるので、1文字=2バイトになってしまいます。
■Lenの場合
dim data1
data1 = "aaaaaaaaaこんばんわ"
msgbox CountLen(data1)
function CountLen(byval data)
dim i
dim c
dim counter
counter = 0
for i = 1 To Len(data)
c = asc(mid(data, i, 1))
if c >= &H00 and c <= &H7E then
counter = counter + 1
else
counter = counter + 2
end if
next
CountLen = counter
end function
■Midの場合
dim data2
data2 = "aaaaaaaaaおつかれ"
msgbox OriginalMid(data2, 9, 3)
function OriginalMid(byval data, byval startIndex, byval length)
dim i
dim c
dim counter
dim returnValue
counter = 0
returnValue = ""
for i = 1 To Len(data)
c = asc(mid(data, i, 1))
if c >= &H00 and c <= &H7E then
counter = counter + 1
else
counter = counter + 2
end if
if (counter >= startIndex) and (counter <= startIndex + length - 1) then
returnValue = returnValue & chr(c)
end if
if counter >= startIndex + length then
OriginalMid = returnValue
exit function
end if
next
end function
No.2
- 回答日時:
>テキストファイルを1行ずつ読み、ある桁からある項目A(20桁)…項目Aは漢字が入ります。
後ろ空白(1バイト空白)詰めです。項目Aが発生するまでは、半角文字列だけですか?
であるなら、項目Aは
strRec1 =Mid(strRecord,10,20)
で正しいです。
漢字桁数は空白(全角や半角)を含まない桁数であれば、
strRec1 =Mid(strRecord,10,20)
LenB(Trim(Replace(strRec1,"□",""))) 'バイト数
Len(Trim(Replace(strRec1,"□",""))) '文字数
です。
さらに、項目Aまでの間に半角と全角が混在するなら
strRec1 = StrConv(MidB(StrConv(strRecord, vbFromUnicode), 10, 20), vbUnicode)
LenB(Trim(Replace(strRec1,"□",""))) 'バイト数
Len(Trim(Replace(strRec1,"□",""))) '文字数
です。
項目Aに半角と全角が混在したバイト数を取得するなら
strRec1 = StrConv(MidB(StrConv(strRecord, vbFromUnicode), 10, 20), vbUnicode)
strRec1 = Trim(Replace(strRec1,"□",""))
LenB(StrConv(strRecord, vbFromUnicode)) 'バイト数
こんな感じで如何ですか?
※ 上記の"□"は全角の空白を示します。
No.3
- 回答日時:
私が簡単な例でやるとおかしくないように思うのですが。
メモ帳に下記作成。拡張子.VBSで保存。
Dim fso,f1,objText
Set fso = CreateObject("Scripting.FileSystemObject")
'--
Set f1 = fso.GetFile("C:\Documents and Settings\xxxx\My Documents\text12.txt")
set objText=f1.OpenAsTextStream(1)
Do While objText.AtendOfLine <> True
s=objText.ReadLine
MsgBox s
s1= mid(s,10,len(s)-9)
MsgBox len(s1)
Loop
objText.Close
Set objText=Nothing
Set f1=Nothing
set fso=Nothing
(テキストファイルのあり場所は修正のこと)
ーーー
text12.txt
例データ
123456789東京都大田区
aaaaaaaaa横浜市
eeee12344こんにちは
333334444Clasification
ーー
6,3,5、13と表示されました。
この例やコード内容はおかしいですか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
[VBScript]バイト長の判定
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
char str[256]の256の意味は?
-
VB.NET LeftBの代用
-
10Mバイトて文字数に すると何...
-
3バイト文字(UTF-8)をprintfで...
-
URLは最高何文字まで可能なので...
-
VB6でのファイルサイズ取得につ...
-
Javaで日本語1文字のバイト数
-
COBOLのCOMP形式について
-
【VB2005】テキストボックス内...
-
バイト列とバイナリ列の違いが...
-
memcmp バイナリデータの比較方法
-
文字数を取得したい
-
HDMLのcgi呼び出し時について
-
2バイト文字の判定はString#get...
-
文字コードの使い分けについて
-
エクセルで2byte文字を含むセル...
-
Shift_JISからUTF-8への変換に...
-
UTF-8とUTF-16およびUTF-32につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
char str[256]の256の意味は?
-
COBOLのCOMP形式について
-
バイト列とバイナリ列の違いが...
-
ビットスワップとバイトスワッ...
-
VBAでShift-JISのURLエンコード
-
ピクセル,dpiから容量(バイト...
-
「1TB」のHDDに日本語は何字入...
-
SQLで1バイト、2バイト混在...
-
バイナリとBCDコード
-
Javaで日本語1文字のバイト数
-
UCS-2の一覧表が欲しい
-
3バイト文字(UTF-8)をprintfで...
-
:(コロン)のKeyCode
-
【VB2005】テキストボックス内...
-
64bit対応
-
URLは最高何文字まで可能なので...
-
機種依存文字をチェックしたい。
おすすめ情報