- PR -

開始行から終了行の文字列を抜き出す

投稿者投稿内容
バルサン
会議室デビュー日: 2007/04/16
投稿数: 6
投稿日時: 2007-12-13 19:07
上総さん、よねKENさん、ご返答有難う御座います。

上総さん
修正して頂いたスクリプトを理解し、無事にバックアップジョブの文字を抜き出すことが出来ました。誠に有難う御座いました。
お客様の要望で今週中には展開予定でしたので、感謝してもしきれません。

あとはお客様から要望がなければ、これで安心して仕事をする事が出来ます。


よねKENさん
すみません。自分の文章が下手でうまく表現する事が出来ず、申し訳ありませんでした。ただ、勘違いしていたポイントが気になります・・・

でも、皆様のおかげで問題が無事に解決できました。
有難う御座いました。
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-12-13 19:59
引用:

こあらさん
コピーペーストをして、拡張子をvbsに変換して使用したのですが、うまくいきませんでした。



「一行ずつ読み込んで、一行ずつ書き出す」のイメージが分かれば十分かな?
と思って、端折って端折り過ぎてしまいました。
不完全なコードを載せて混乱させて申し訳ありませんでした。

# ほんの少しの追加で動作可能なサンプルだったのに・・・
バルサン
会議室デビュー日: 2007/04/16
投稿数: 6
投稿日時: 2007-12-14 17:08
こあらさん、ご返信有難う御座います。

引用:

こあらさんの書き込み (2007-12-13 19:59) より:
引用:

こあらさん
コピーペーストをして、拡張子をvbsに変換して使用したのですが、うまくいきませんでした。



「一行ずつ読み込んで、一行ずつ書き出す」のイメージが分かれば十分かな?
と思って、端折って端折り過ぎてしまいました。
不完全なコードを載せて混乱させて申し訳ありませんでした。

# ほんの少しの追加で動作可能なサンプルだったのに・・・



問題は解決致しましたが、実はこあらさんの記載して下さったコードをどうすれば良かったのかを解決中だったりします。
そして、まだ未解決のまま悩んでおります。

まだ、ご覧になられておりましたらご指摘を頂きたいです・・・

現在、以下のコードで設定しております。
コード:
Option Explicit

Dim objFSo
Dim objFileSys
Dim strCreateFile
Dim WriteFile, ReadFile
Dim strTxtBuffer

Const ForReading = 1 
Const ForWriting = 2 

Set objFSo = CreateObject("Scripting.FileSystemObject") 
Set objFileSys = CreateTextFile("Scripting.FileSystemObject")

strCreateFile = objFileSys.CreateTextFile("write.txt")
Set WriteFile = objFilesys.OpenTextFile("write.txt", ForWriting)
Set ReadFile = objFilesys.OpenTextFile("read.txt", ForReading)

Set objFileSys = nothing

 Do While Not ReadFile.AtEndOfStream
  strTxtBuffer = ReadFile.ReadLine
    Call WriteFile.WriteLine(strTxtBuffer)
 Loop

rFile.Close
wFile.Close

MsgBox "処理終了" 



どうでしょうか?
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-12-14 21:47
せっかくご指名頂いたので少しだけ。

入力ファイルを順次読み込み、"開始条件"という文字列を含んだ行から、
"終了条件"という文字列を含んだ行まで、を出力します。

コード:

Option Explicit

Dim objFSO
Dim WriteFile, ReadFile
Dim strTxtBuffer
Dim WriteFlg

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WriteFile = objFSO.OpenTextFile("write.txt", ForWriting, True)
Set ReadFile = objFSO.OpenTextFile("read.txt", ForReading)
Set objFSO = nothing

WriteFlg = False

Do While Not ReadFile.AtEndOfStream
strTxtBuffer = ReadFile.ReadLine

if 0 < InStr(strTxtBuffer, "開始条件") Then
WriteFlg = True
end if

if WriteFlg = True then
Call WriteFile.WriteLine(strTxtBuffer)
end if

if 0 < InStr(strTxtBuffer, "終了条件") Then
Exit Do
end if

Loop

ReadFile.Close
WriteFile.Close

Set ReadFile = Nothing
Set WriteFile = Nothing

MsgBox "処理終了"



当たり前ですが、各ステートメントにはそれぞれ意味があります。
面倒でも一行一行何のために何をしているのか調べることをお勧めします。


[修正]
前> Set WriteFile = objFSO.OpenTextFile("write.txt", ForWriting, 2)
後> Set WriteFile = objFSO.OpenTextFile("write.txt", ForWriting, True)
[/修正]

[ メッセージ編集済み 編集者: こあら 編集日時 2007-12-14 22:36 ]
バルサン
会議室デビュー日: 2007/04/16
投稿数: 6
投稿日時: 2007-12-15 12:46
お忙しい中、ご回答頂き有難う御座います。

引用:

こあらさんの書き込み (2007-12-14 21:47) より:
せっかくご指名頂いたので少しだけ。

入力ファイルを順次読み込み、"開始条件"という文字列を含んだ行から、
"終了条件"という文字列を含んだ行まで、を出力します。

コード:
Option Explicit

Dim objFSO
Dim WriteFile, ReadFile
Dim strTxtBuffer
Dim WriteFlg

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set WriteFile = objFSO.OpenTextFile("write.txt", ForWriting, True)
Set ReadFile = objFSO.OpenTextFile("read.txt", ForReading)
Set objFSO = nothing

WriteFlg = False

Do While Not ReadFile.AtEndOfStream
  strTxtBuffer = ReadFile.ReadLine

  if 0 < InStr(strTxtBuffer, "開始条件") Then
    WriteFlg = True
  end if

  if WriteFlg = True then
    Call WriteFile.WriteLine(strTxtBuffer)
  end if

  if 0 < InStr(strTxtBuffer, "終了条件") Then
    Exit Do
  end if

Loop

ReadFile.Close
WriteFile.Close

Set ReadFile = Nothing
Set WriteFile = Nothing

MsgBox "処理終了" 



当たり前ですが、各ステートメントにはそれぞれ意味があります。
面倒でも一行一行何のために何をしているのか調べることをお勧めします。


[修正]
前> Set WriteFile = objFSO.OpenTextFile("write.txt", ForWriting, 2)
後> Set WriteFile = objFSO.OpenTextFile("write.txt", ForWriting, True)
[/修正]

[ メッセージ編集済み 編集者: こあら 編集日時 2007-12-14 22:36 ]



上総様とこあら様の記載して下さったコードを基に、その一行ごとの処理が「何をしているのか?」というところを、もっと細かく勉強していきたいと思います。今までプログラムに関して一切触れたことがなかったので、良い機会だと思っております。

本当に助かりました。有難う御座いました。
失礼致します。
prime
常連さん
会議室デビュー日: 2007/03/23
投稿数: 22
投稿日時: 2007-12-19 02:38
このスレッド見ていて疑問があったので質問です。

コード:
Option Explicit

Dim objFSO
Dim WriteFile, ReadFile
Dim strTxtBuffer
Dim WriteFlg

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set WriteFile = objFSO.OpenTextFile("write.txt", ForWriting, True)
Set ReadFile = objFSO.OpenTextFile("read.txt", ForReading)
Set objFSO = nothing

WriteFlg = False

Do While Not ReadFile.AtEndOfStream
  strTxtBuffer = ReadFile.ReadLine

  if 0 < InStr(strTxtBuffer, "開始条件") Then
    WriteFlg = True
  end if

  if WriteFlg = True then
    Call WriteFile.WriteLine(strTxtBuffer)
  end if

  if 0 < InStr(strTxtBuffer, "終了条件") Then
    Exit Do
  end if

Loop

ReadFile.Close
WriteFile.Close

Set ReadFile = Nothing
Set WriteFile = Nothing

MsgBox "処理終了" 



例えば、1〜10まで文字があって5〜7を抜き出すというのは出来るのは理解。ですが、1〜2・3〜4・8〜10を抜き出したい場合、コードを何回も書き足す事でしか抜き出しが出来ないのでしょうか?
それとも、繰り返しの処理で実行が可能なのか・・・うーん(・_・;
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-12-19 09:36
引用:

primeさんの書き込み (2007-12-19 02:38) より:

ですが、1〜2・3〜4・8〜10を抜き出したい場合、コードを何回も書き足す事でしか抜き出しが出来ないのでしょうか?それとも、繰り返しの処理で実行が可能なのか・・・うーん(・_・;


一旦、文字列の配列やコレクションにすべて格納してから指定行を抽出するのが賢明でしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-12-19 10:47
引用:

ですが、1〜2・3〜4・8〜10を抜き出したい場合、コードを何回も書き足す事でしか抜き出しが出来ないのでしょうか?それとも、繰り返しの処理で実行が可能なのか・・・うーん(・_・;



実行時に動的に開始条件/終了条件を指定したいということなら、
外部ファイルや実行時引数、InputBoxなどを使えば良いと思います。

1回の実行で「1〜2・3〜4・8〜10」の3ファイルに振り分けるということなら、
VBS側は上記のような方法で実行時に条件を指定できるようにしておいて、
batなどから3回呼び出す方が良いと思います。

入力ファイルが膨大な行数なら、複数受け付けた条件によって
WriteFlgをON/OFFすれば良いでしょうか。

スキルアップ/キャリアアップ(JOB@IT)