• ベストアンサー

再質問 ファイル比較について

VB5.0を使用しております。初心者で解らない事だらけの為質問を致します。 FD内のデータとHD内にあるファイル26個を順に比較したいのですが 以前質問して下記プログラムを組んでみたのですが 動作しているかも判りません。 どなたか解説及び添削を御願い致します。 やりたい事は、データ変換をして出来たファイルをFDとHD内にバックアップとしてコピーをしています。そのデータを1ファイルずつ比較し問題が無いか確認したいのです。以前よりFDにコピーした際に、書き込み不良が発生し使用出来ない事があった為です。 御手数をお掛け致しますが、宜しくお願い致します。 作成したプログラム 'Private Sub Command1_Click() Function Comp(ByVal F1$, ByVal F2$) As Long Dim EXE, STD, TxT$, CNT& F1 = ("a:\W-NO-01.DAT") F2 = ("c:\VB\W-NO-01.DAT") TxT = "FC /B" & F1 & " " & F2 Set EXE = CreateObject("WScript.Shell").Exec(TxT) Set STD = EXE.StdOut Do Until STD.AtEndOfStream TxT = STD.ReadLine CNT = CNT + 1 If CNT = 2 Then Exit Do Loop If EXE.Status = 0 Then EXE.Terminate If TxT = "FC: 相違点は検出されませんでした" Then CNT = 0 Else CNT = 1 End If Else CNT = EXE.ExitCode End If STD.Close Comp = CNT Dim keka As Long keka = Comp("a:\W-NO-01.DAT", "c:\VB\W-NO-01.DAT") Select Case keka Case 0: MsgBox "二つのファイルの内容は等しい" Case 1: MsgBox "二つのファイルの内容は等しくない" Case 2: MsgBox "入出力障害を検出した" End Select End Function

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

う~ん、何から説明しましょうか... Option Explicit ~ (最初の)End Function はこのままで良いです。 その後、Dim I&, F1$, F2$ の行以下を全て削除してください。 それで、とりあえず実行できるでしょう。 Dim I&, F1$, F2$ 以下は、Command1_Click() の中のCompを呼び 出している部分を置き換えるためのコードです。 keka = Comp("a:\W-NO-01.DAT", "c:\VB\W-NO-01.DAT") のように 固定で書いてしまうと、1対のファイルしか比較できないでしょ? でも、比較したいファイルは26対あるんですよね。それで、For文で ループしながら26対の比較を順次、実行しようという意図です。 もし、ファイル名が"W-NO-01.DAT"、"W-NO-02.DAT"、"W-NO-03.DAT" のようになっているとしての話ですが・・・ なので、最終的には Command1_Click() は以下のようになります。 Private Sub Command1_Click()   Dim keka As Long   Dim I&, F1$, F2$   For I = 1 To 26     F1 = "a:\W-NO-" & Format(I, "00") & ".DAT"     F2 = "c:\VB\W-NO-" & Format(I, "00") & ".DAT"     keka = Comp(F1, F2)     Select Case keka       Case 1:         MsgBox F1 & "と" & F2 & "は等しくない"         Exit For       Case 2:         MsgBox F1 & "と" & F2 & "の比較で入出力障害を検出した"         Exit For     End Select   Next End Sub あと、一番最後の End Function は余分ですから削除します。

te0000
質問者

お礼

nda23様 毎度毎度ありがとうございます。 上記回答を頂く前に、関数について勉強し 大体同じようなソースまで行き着きました。 ただ実行したのですが、01ファイルのみで実行が終了してしまうのと 同じ内容のファイルを比較させたのですが、 等しく有りませんとなってしまいます。 まだ何か問題があるのでしょうか? 御教授頂けませんでしょうか。 ↓今回のソースです。 Option Explicit Function Comp(ByVal F1$, ByVal F2$) As Long Dim EXE, STD, TxT$, CNT&, I&  TxT = "FC /B" & F1 & " " & F2  Set EXE = CreateObject("WScript.Shell").Exec(TxT)  Set STD = EXE.StdOut  Do Until STD.AtEndOfStream   TxT = STD.ReadLine   CNT = CNT + 1    If CNT = 2 Then Exit Do    Loop    If EXE.Status = 0 Then    EXE.Terminate    If TxT = "FC: 相違点は検出されませんでした" Then    CNT = 0    Else    CNT = 1    End If    Else CNT = EXE.ExitCode  End If STD.Close Comp = CNT End Function Private Sub Command1_Click() Dim keka As Long Dim I&, F1$, F2$ For I = 1 To 26   F1 = "a:\W-NO-" & Format(I, "00") & ".DAT"   F2 = "c\VB\W-NO-" & Format(I, "00") & ".DAT"   keka = Comp(F1, F2)   Select Case keka    Case 0:     MsgBox F1 & "と" & F2 & " は等しい"    Exit For    Case 1:     MsgBox F1 & "と" & F2 & "は等しくない"    Exit For    Case 2:     MsgBox F1 & "と" & F2 & "の比較で入出力障害を検出した"    Exit For   End Select  Next End Sub

その他の回答 (7)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.8

マシン、OSのスペックが低いせいではないでしょうか。 私の場合はPentium(R)D 2.8GHz、WindowsXP SP3,または Core2Duo 2.4GHz、WindowsXP SP3です。また、実行環境は Excel.VBA、及びVB6.0です。(微妙にVB環境が違うが・・・) それと、ここに記載されたものと実際のコーディングが少し違う のでは?今回、Debug.Printが二重になっただけですよね? 同じ内容が繰り返されているだけですから。これと、前回が異なる 所は STD.AtEndOfStream がFalseになっていることです。これが 正しい結果であり、前回のTrueは異常な結果です。 プログラムミス、OSが古い、マシンが遅いの何れかで下記★の所へ 行ってしまうんでしょうね。あと、デバッグモードで1行ずつ実行 しているとか・・・ だけど、ミスの可能性が90%くらいなので、Debug.Printを元に戻して みてください。 If TxT = "FC: 相違点は検出されませんでした" Then     CNT = 0 Else     CNT = 1 '★ここへ来ると戻り値=1なので、「等しくない」 End If

te0000
質問者

お礼

nda23様 いつもお世話になっております。 PCのスペックはCore2Duo 2.0GHz,WindowsXP SP3ですので nda23様使用のPCと大差ないと思います。 もう一度プログラムを見直してみたいと思います。 ありがとうございます。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.7

予想通りの結果ですね。 どこも間違ってはいないのですが、そう言ってもしょうがないので、 以下のように修正してみましょう。 Do Until STD.AtEndOfStream → Do While EXE.Status = 0 それと、以下のメッセージが本当ならコーディングミスですね。 "a;\W-NO-01.DATとc:\VB\W-NO-01.DATの比較で入出力障害を検出した" "a:"となるべきところが"a;"になってます。(見易いように 全角にしています。ドライブ指定がコロンでなくセミコロンです) それでファイルが開かないのです。 コピペなら、こうならないハズなんだが・・・ とりあえず、コーディングミスを修正して実行し、それでもダメなら Do文の修正を試みてください。

te0000
質問者

お礼

nda23様 早速の御回答ありがとうございます。 Do Until STD.AtEndOfStream → Do While EXE.Status = 0 変更したのですが、等しくないとなってしまいます。 そこで Debug.Print EXE.Status '★←この行を追加する。 Debug.Print STD.AtEndOfStream '★←この行を追加する。 Debug.Print CNT, TxT '★←この行を追加する。 を追加したところ正しく比較して等しい結果が出ました。 これはなぜなのでしょうか? ちなみにイミディエイトには以下の表示が出ました。 ******************************** 0 False 0 ファイル A:\W-NO-01.DAT と C:\VB\W-NO-01.DAT を比較しています 0 False 0 ファイル A:\W-NO-02.DAT と C:\VB\W-NO-02.DAT を比較しています ******************************** また先程のお礼に書いた入力障害の記述はコピペではなく 手動で入力した為間違っておりました。申し訳ございません。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.6

No.4の「お礼」にある通りに作られていませんね。 Do Until STD.AtEndOfStream ~ Loop はプログラムが終了して、標準出力がEOFになるか(Until条件)、 標準出力に2行目の出力が行われる(CNT = 2)までループします。 >If CNT = 2 Then Exit Do Loopの外側でブレークした時、CNTが1というのはあり得ないです。 以下のように状態と標準出力をモニタしてください。 TxT = STD.ReadLine Debug.Print EXE.Status '★←この行を追加する。 Debug.Print STD.AtEndOfStream '★←この行を追加する。 Debug.Print CNT, Txt '★←この行を追加する。 CNT = CNT + 1 1ループにつき、イミディエイト・ウィンドウに3行の情報が 表示されるでしょう。この結果をお知らせください。尚、変数や プロパティを参照する時はローカルウィンドウでも良いのですが、 イミディエイトウィンドウで"? CNT" のように打ち込んでも表示 させることができます。

te0000
質問者

お礼

nda23様 いつも御回答頂きありがとうございます。 上記行を追加した結果は以下になりました。 結果 ******************************** 0 True 0 ファイル A:\W-NO-01.DAT と C\VB\W-NO-01.DAT を比較しています ******************************** ただ動作させたところ "a;\W-NO-01.DATとc:\VB\W-NO-01.DATの比較で入出力障害を検出した" となってしまいました。 No.4のお礼に記述したソースはそのまま、コピペで貼っただけなのですが、何か変わってしまったのでしょうか。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.5

このソースを当方で実行しましたが、正しい結果になりました。 以下の所にブレークポイントを置いて、停止した時の値を調べて ください。 == 前略 == If EXE.Status = 0 Then   EXE.Terminate   If TxT = "FC: 相違点は検出されませんでした" Then '★ここ     CNT = 0   Else     CNT = 1   End If Else   CNT = EXE.ExitCode '★ ここ End If (1)最初のポイントで停止した場合  TxTの内容 (2)2番目のポイントで停止した場合  1ステートメントだけ実行し、CNTの値(=EXE.ExitCode)

te0000
質問者

お礼

nda23様 お世話になっております。 ブレイクポイントで停められたのですが、TxTの内容が 何所に出てくるか判りませんでした。 ローカルウインドウ内で良いのでしょうか? (1)でブレークポイントで停めた時はローカルウインドウでは TxT "ファイル A:\W-NO-01.DATとC:\VB\W-NO-01.DATを比較しています" と出てきます。 その時のCNTは1です。 (2)でブレーク使用としますが停まりませんでした。 停まらない時は"a:\W-NO-01.DATとc:\VB\W-NO-01.DATは等しくない" とMsgBoxに表示されます。 停まった時に1ステートメントだけ実行するとCNTは2になり 最後まで実行すると"a:\W-NO-01.DATとc:\VB\W-NO-01.DATの比較で入出力障害を検出した"となります。 これで何か判りますでしょうか。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

先ず間違いから 誤:TxT = "FC /B" & F1 & " " & F2 正:TxT = "FC /B " & F1 & " " & F2 /B の後ろに空白がないので、パス名(F1)がくっついてしまいます。 >01ファイルのみで実行が終了してしまう せっかくFor 使ったのに、Exit For で抜けているじゃないですか。 サンプルでは等しい場合は何も表示せず、次々と処理を続けていき ます。等しくないか、入出力障害の場合はメッセージを表示して、 処理を中断します。だから Exit For なんです。 まあ、好みなんで等しい時もメッセージ出して良いんですが、kekkaが 0 の時は Exit For するの止めましょうね。

te0000
質問者

お礼

nda23様 いつもありがとうございます。 ご指摘ありましたスペースやExit Forを抜いて確認しているのですが やはりファイルが等しくありませんと出てしまいます。 コマンドプロンプトで直にFCコマンドを入力すると相違点はありません となります。 何か間違いがあるのでしょうか? FCコマンドを入力して出てくる結果が "ファイル A:\W-NO-01.DAT と C:\VB\W-NO-01.DAT を比較しております FC: 相違点は検出されませんでした" となっているからでしょうか? 毎度毎度御手数をお掛けし申し訳ございませんが、宜しくお願い致します。 今回修正したソース↓ Option Explicit Function Comp(ByVal F1$, ByVal F2$) As Long Dim EXE, STD, TxT$, CNT&, I& TxT = "fc /b " & F1 & " " & F2 Set EXE = CreateObject("WScript.Shell").Exec(TxT) Set STD = EXE.StdOut Do Until STD.AtEndOfStream TxT = STD.ReadLine CNT = CNT + 1 If CNT = 2 Then Exit Do Loop If EXE.Status = 0 Then EXE.Terminate If TxT = "FC: 相違点は検出されませんでした" Then CNT = 0 Else CNT = 1 End If Else CNT = EXE.ExitCode End If STD.Close Comp = CNT End Function Private Sub Command1_Click() Dim keka As Long Dim I&, F1$, F2$ For I = 1 To 26 F1 = "a:\W-NO-" & Format(I, "00") & ".DAT" F2 = "c\VB\W-NO-" & Format(I, "00") & ".DAT" keka = Comp(F1, F2) Select Case keka Case 1: MsgBox F1 & "と" & F2 & "は等しくない" Exit For Case 2: MsgBox F1 & "と" & F2 & "の比較で入出力障害を検出した" Exit For End Select Next End Sub

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

以前回答したnda23です。 ★ボタンをクリックした時のイベントプロシージャ Private Sub Command1_Click()   Dim keka As Long   keka = Comp("a:\W-NO-01.DAT", "c:\VB\W-NO-01.DAT") '←比較する   Select Case keka '←結果に応じた処理の振り分け     Case 0: MsgBox "二つのファイルの内容は等しい"     Case 1: MsgBox "二つのファイルの内容は等しくない"     Case 2: MsgBox "入出力障害を検出した"   End Select End Sub ★比較処理 Function Comp(ByVal F1$, ByVal F2$) As Long '== 中略 == Comp = CNT End Function 【解説】 Command1ボタンをクリックすると比較を行い、結果に応じたメッセージを表示します。 ファイルが26個あるなら、正しくは以下のようになると思います。 Dim I&, F1$, F2$ For I = 1 To 26   F1 = "a:\W-NO-" & Format(I, "00") & ".DAT"   F2 = "c:\VB\W-NO-" & Format(I, "00") & ".DAT"   keka = Comp(F1, F2)   Select Case keka     Case 1:       MsgBox F1 & "と" & F2 & "は等しくない"       Exit For     Case 2:       MsgBox F1 & "と" & F2 & "の比較で入出力障害を検出した"       Exit For   End Select Next

te0000
質問者

お礼

nda23様 いつも御回答頂きありがとうございます。 上記順に記述するという事なのでしょうか? 下記プログラムですと Function Comp(ByVal F1$, ByVal F2$) As Longで ”End Sub,End FunctionまたはEnd Property以降には、コメントのみが記述できます。” とエラーが発生致します。 何が悪いのでしょうか? 今回記述したソース Option Explicit Private Sub Command1_Click() Dim keka As Long keka = Comp("a:\W-NO-01.DAT", "c:\VB\W-NO-01.DAT") '←比較する Select Case keka '←結果に応じた処理の振り分け Case 0: MsgBox "二つのファイルの内容は等しい" Case 1: MsgBox "二つのファイルの内容は等しくない" Case 2: MsgBox "入出力障害を検出した" End Select End Sub Function Comp(ByVal F1$, ByVal F2$) As Long Dim EXE, STD, TxT$, CNT&, I& TxT = "FC /B" & F1 & " " & F2 Set EXE = CreateObject("WScript.Shell").Exec(TxT) Set STD = EXE.StdOut Do Until STD.AtEndOfStream TxT = STD.ReadLine CNT = CNT + 1 If CNT = 2 Then Exit Do Loop If EXE.Status = 0 Then EXE.Terminate If TxT = "FC: 相違点は検出されませんでした" Then CNT = 0 Else CNT = 1 End If Else CNT = EXE.ExitCode End If STD.Close Comp = CNT End Function Dim I&, F1$, F2$ For I = 1 To 26 F1 = "a:\W-No-" & Format(I, "00") & ".DAT" F2 = "c\VB\W-NO-" & Format(I, "00") & ".DAT" keka = Comp(F1, F2) Select Case keka Case1: MsgBox F1 & "と" & F2 & "は等しくない" Exit For Case 2: MsgBox F1 & "と" & F2 & "の比較で入出力障害を検出した" Exit For End Select Next End Function

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

単に成功したどうかなら RunメソッドでFC.EXEのリターンコードを取得した方が簡単なように思います Set EXE = CreateObject("WScript.Shell") ' ウィンドウ非表示でFC.EXEが終了するまで待機 ret = EXE.run( TxT, 0, True ) として retが0なら同じ 1なら相違がある 2なら引数のファイルが開けなかった -1なら引数が足らない といった具合です ・・・

te0000
質問者

お礼

redfox63様 御回答頂きありがとうございます。 回答頂いたソースは質問をした時に記述してあるソースに 追加するのでしょうか? 基本的なことを質問し申し訳ありません。

関連するQ&A

  • フォルダ内にあるファイル全てを比較したい

    以前よりこちらでファイル比較を相談していたものですが ファイルNo.1~26までを比較するソフトは出来たのですが 状況によっては1~3までとか1,4,18とか飛ばし飛ばしに ファイルがある場合があります。 その場合For文では無いファイル番号で比較が終わってしまい 次に進まないのですが、こういった時はどうしたらよいのでしょうか? IF文なのかとも思いましたが、調べてもしっくりくるものが判らず ???だらけです。 どなた様か御教授御願い致します。 ちなみに下がファイル比較するソースになります。 Option Explicit Function Comp(ByVal F1$, ByVal F2$) As Long Dim EXE, STD, TxT$, CNT&, I& TxT = "fc /b " & F1 & " " & F2 Set EXE = CreateObject("WScript.Shell").Exec(TxT) Set STD = EXE.StdOut Do While EXE.Status = 0 'Do Until STD.AtEndOfStream TxT = STD.ReadLine CNT = CNT + 1 If CNT = 2 Then Exit Do Loop If EXE.Status = 0 Then EXE.Terminate If TxT = "FC: 相違点は検出されませんでした" Then CNT = 0 Else CNT = 1 End If Else CNT = EXE.ExitCode End If STD.Close Comp = CNT End Function Private Sub Command1_Click() Dim keka As Long Dim I&, F1$, F2$ For I = 1 To 25 F1 = "a:\W-NO-" & Format(I, "00") & ".DAT" F2 = "c:\VB\W-NO-" & Format(I, "00") & ".DAT" keka = Comp(F1, F2) Select Case keka Case 1: MsgBox F1 & "と" & F2 & "は等しくない" Exit For Case 2: MsgBox F1 & "と" & F2 & "の比較で入出力障害を検出した" Exit For End Select Next End Sub

  • awkで別のファイルを参照して、検索結果を得たい。

    awk初心者です。 あるファイル(targetファイル)に、どのような属性があるのかを検索ファイル(objectファイル)を 使って調べたいのです。そこでawkを使って: targetファイル 5 a c objectファイル 1,aa 2,bb 3,cc 4,dd 5,aa 6,bb 7,cc 8,dd 9,aa 10,bb a,cc b,dd c,aa d,bb e,cc f,dd g,aa h,bb i,cc j,dd 以下のようなスクリプトを作成し mawk32 -f スクリプト target.txt object.txt としたのですが、動作しません。 何らかの御助言を頂ければ幸いです。 #targetファイル読み込み FILENAME == ARGV[1]{ dat1[FNR]=$1 no_dat1 = FNR } #objectファイル読み込み FILENAME == ARGV[2]{ dat2[FNR]=$0 no_dat2 = FNR } #相互に検索 END{ for (i = 1; i <= no_dat1; i++){ for (j = 1; j <= no_dat2; j++){ if (dat1[i]~/dat2[j]/) { print dat1[i],dat2[j] } }}}

  • VBAのDoLoopでファイルがあるかチェック

    VBA超初心者なりに記述したのですが、どうしたらいいのかわからないのでお助けください。 例えば以下のような一定の命名規則のファイルが、r:\testに複数あります。 0123-20140301-abcd.txt 0124-20140302-efgh.txt xxxx-20140301.csv xxxx-20140302.csv 「通し番号4桁-日付8桁-4桁(不定).txt」に対応する「xxxx(固定)-日付8桁.csv」のファイルがあるかチェックしたいだけなのですが、以下の記述では一番古い日付の1個しかチェックしてくれません。 ''''''''''''''''''''''''''''''''''''''''''''''''''  Dim buf As String  Dim cnt As Long  buf = Dir("r:\test\????-20*.txt") Do While buf <> ""  If Dir("r:\test\xxxx-" & Mid(buf, 6, 8) & ".csv") <> "" Then   Call MsgBox(buf & "が存在します")  End If  cnt = cnt + 1  buf = Dir() Loop   Call MsgBox(cnt & "個のファイルをチェック済み") '''''''''''''''''''''''''''''''''''''''''''''''''' 「xxxx-20140301.csv」が存在しない場合は「1個のファイルをチェック済み」と出て終わります。 本当は2個のファイルをチェックしてほしいのです。 なお、実際にファイルが何個あるかはその時々なので、いつでも使えるようにForNextではなくDoLoopを選びました。 If~Endifがなければ「2個のファイルをチェック済み」と出るので、その部分の記述が怪しいとは思うのですが。 なお、自宅のPCにはExcelがないので、VB2010Expressを入れて再現してみました。 msgboxの記述方法が違うくらいで、後は職場で悩んでいた内容そのままです。 どうぞよろしくお願いします。

  • 乱数の利用

    僕の通う中学校では、乱数を利用してプログラムを作成することになりました。そしてプログラムを作りましたがステートメントがないと出てきます。どう解決すればよいでしょうか?これがプログラムです。 Dim a,b,c,d,e,f,g a=msgbox("幸せですか?",4) if a=6 then const b="運勢" randomize b=int(rnd*10) select case b case 0,1,2 c=messagebox("吉でした。彼女はいますか?",4) if c=6 then msgbox"90%",,b elseif c=7 then msgbox"60%",,b end if case 3,4,5 d=msgbox("凶でした。友達はいますか?",4) if d=6 then msgbox"60%",,b elseif d=7 then msgbox"20%",,b end if case 6,7 e=msgbox("末吉でした。",4) if e=6 then msgbox"60%",,b elseif e=7 then msgbox"40%",,b end if case 8 f=msgbox("大凶でした。夢はありますか?",4) if f=6 then msgbox"30%",,b elseif f=7 then msgbox"10%",,b end if case else msgbox"100%",,b end if elseif a=7 msgbox"0%" end select

  • IF文で該当の処理を通らない

    VB6 SP5 フォームのロードで構造体変数に 値を入れ、ボタンを押したときに IF文の処理を通したのですが aaaに20以上の数値を入れると 該当の処理を通らず全てELSEを 通ってしまいます 以下コード ////// 標準モジュール ////// Type Strct_Dat □□start_no(5) As Integer □□end_no(5) As Integer End Type Global StrctDat As Strct_Dat ////// フォーム ////// Private Sub Form_Load() □□With StrctDat □□□□.start_no(0) = 1 □□□□.start_no(1) = 10 □□□□.start_no(2) = 20 □□□□.start_no(3) = 30 □□□□.start_no(4) = 40 □□□□.end_no(0) = 9 □□□□.end_no(1) = 19 □□□□.end_no(2) = 29 □□□□.end_no(3) = 39 □□□□.end_no(4) = 49 □□End With End Sub Private Sub Command3_Click() □□Dim aaa As Integer □□aaa = 20 □□With StrctDat □□□□If .start_no(0) <= aaa And aaa <= .end_no(0) Then □□□□□□MsgBox ("0") □□□□ElseIf .start_no(1) <= aaa And aaa <= .end_no(1) Then □□□□□□MsgBox ("1") □□□□ElseIf .start_no(2) <= aaa And aaa <= .end_no(2) Then □□□□□□MsgBox ("2") □□□□ElseIf .start_no(3) <= aaa And aaa <= .end_no(3) Then □□□□□□MsgBox ("3") □□□□ElseIf .start_no(4) <= aaa And aaa <= .end_no(4) Then □□□□□□MsgBox ("4") □□□□Else □□□□□□MsgBox ("ELSE") □□□□End If □□End With End Sub 構造体の型をLONGにすると ちゃんと該当処理をとおります また、デバッグ時は正常で EXE化したときのみ該当処理を 通らなくなります 回避方法はあるのですが 何かご存知の方いらっしゃいましたら 教えて下さい よろしくお願い致します

  • VBSで比較条件について

    Y = 20040601 x = Date g = Mid(x,1,4) & Mid(x,6,2) & Mid(x,9,2) If g < x Then msgbox "w" Else msgbox "y" End If の時にMsgbox にWが入ります。 Yが入る方法はありますでしょうか 教えて下さい。

  • csvファイルのデータを構造体に

    csvファイルのカンマを数えて任意の文字列を抜き出すまでは出来たのですがそこから構造体に格納するまでがこちらのサイトでも検索しましたがよくわかりません。 ご指摘のほどよろしくお願いします。 csvデータ 番号,名前,住所,電話,年齢,性別 1,佐藤,東京,1234,33,A 2,田中,,5678,22, 3,坂井,名古屋,,,B ・ ・ 番号,住所,電話,年齢を格納する場合 struct k_data { char no[4];/* 出来れば番号を右詰めにしたい */ char add[20]; int tel; int age; } kaiin[256]; /* 文字列を抜き出す↓ */ int main(void) { FILE *fp1,*fp2; char dat[256]; char *ch; int cnt; /* fp1 ファイルオープン */ /* fp2 ファイルクローズ */ while (fgets(dat, 256, fp1) != NULL) { cnt = 0; for (ch = dat; *ch != '\0'; ch++) { if (*ch ==',') { if (cnt == 0) { putc(*ch, fp2); } if (cnt == 2) { putc(*ch, fp2); } if (cnt == 3) { putc(*ch, fp2); } if (cnt == 4) { putc('\n', fp2); } cnt++; } else { if (cnt == 0) { putc(*ch, fp2); } if (cnt == 2) { putc(*ch, fp2); } if (cnt == 3) { putc(*ch, fp2); } if (cnt == 4) { putc(*ch, fp2); } } } putc('\0', fp2); } fclose(fp2); fclose(fp1); }

  • 下記質問Vol.2です

    strSQL = "insert into 商品マスタ values(" & txtループ(0).Text & ",'" & _ txtループ(1).Text & "'," & txtループ(2).Text & ")" strSQL2 = "update 商品マスタ set 商品名=" & "'" & txtループ(1).Text & "'," & "単価=" & _ txtループ(2).Text & " where " & "商品ID=" & txtループ(0).Text If txtループ(0).Text = "" Then MsgBox "商品IDに何かを入力してください" txtループ(0).SetFocus Exit Sub End If If txtループ(1).Text = "" Then MsgBox "商品名に何かを入力してください" txtループ(1).SetFocus Exit Sub End If If txtループ(2).Text = "" Then MsgBox "単価に何かを入力してください" txtループ(2).SetFocus Exit Sub End If vol.3へ 関連URL:http://www.okweb.ne.jp/kotaeru.php3?q=160999

  • ファイルの入力、出力

    #include<stdio.h> int main(){ int a,b; FILE *fp0, *fp1;   fp0 = fopen("test1.dat", "r"); if( fp0 == NULL ){ printf("Cannot open test1.dat"); exit(1); } fp1 = fopen("file.txt", "w"); while((fscanf(fp0, "%d %d", &a,&b)) != EOF){ fprintf(fp1, "%d %d\n", a*a,b*b); } fclose(fp0); fclose(fp1); return(0); } test1.datファイルを読み込んで、変数a,bに値をいれ、 その二乗結果をfile.txtに書き込むプログラムなのですが test1.datファイルに書き込まれてる値をどのようにa,bに代入されているのかわかりません。 例えば test1.datが 1 2 3 4 5 であると、 file.txtには 1 4 9 16 25 16 と書き込まれています。 test1.datが 1 1 2 2 3 3 であると file.txtには 1 1 4 4 9 9 となっています。 どのように、変数に値が入るのでしょうか??

  • Access テキスト インポート

    現在指定したファイルしかインポートしが出来ないのでこれを 指定したファイルをインポートしたいのですがどのようすれは、いいでしょうか?よろしくお願いします。 Private Sub コマンド5_Click() On Error Resume Next Dim MsgNo As Integer Dim Msg1, Msg2, Msg3 As String Dim su As String Dim cut As Integer Dim fd As String Dim suu As String Dim db As Database Dim d1 As Recordset Msg1 = " インポートを開始します。" Msg2 = "「DAT」ファイルがありません。" Msg3 = "「DAT」ファイルを c:\DATデータにコピーし、再度実行して下さい。" MsgNo = MsgBox(Chr(9) & Msg1 & Chr(9), 1) If MsgNo = 2 Then 'キャンセルボタンで終了 GoTo Exit_インポート_Click End If EmptyAllTable 'テーブルクリア Set db = CurrentDb Set d1 = db.OpenRecordset("t_製品データ") fd = Dir("C:\DATデータ\*.dat") If fd = "" Then 'ファイルがなければ、メッセージを表示、処理を戻します。 Beep MsgNo = MsgBox(Msg2 & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Msg3, 16) GoTo Exit_インポート_Click End If