• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[AB]ファイルの読み込み・書き込み)

[AB]ファイルの読み込み・書き込み

このQ&Aのポイント
  • Active Basic 4.23.00を使って、外部フォルダから文字列を呼び出して正誤判定を行うプログラムについて
  • プログラミング初心者のため、書いたコードの正誤判定ができない問題が発生している
  • コード詳細はZIPファイルを参照しており、解決策を教えてほしい

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

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

まず EditBox1のテキストを PassWord0に読み込めていますか GetWindowText(hMainWnd,Buffer,Length+1) ss = Str$( Buffer ) PassWord0=ss としていますが これだとMainWindowのタイトルを取得しますよ hEdit = GetDlgItem( hMainWnd, EditBox1 ); GetWindowText(hEdit,Buffer,Length+1) といった具合にしないと希望のデータが取得できませんよ ss = Str$( Buffer ) では Bufferのアドレスを文字列にしてしまいます ss = MakeStr( Buffer ) ファイルから読み込んでいるbufferからの文字列生成も同じことが言えます ss = MakeStr( buffer ) Dim nCRLF as integer nCRLF = InStr(1, ss, Chr$(13) + Chr$(10)) if nCRLF> 0 then   ss = Mid$( ss, 1, nCRLF - 1 ) end if といった具合で改行コードをあるなら削除しましょう 複数行の中から探すなら   dim sLine as String   dim nStart as Integer, nCRLF as Integer   nStart = 1   ' ssの中に CRLFがあるかチェック   nCRLF = InStr( nStart, ss, Chr$(13) + Chr$(10) )   if nCRLF > 0 then     ' CRLFがあるなら     do       ' ssの部分文字列を抽出       sLine = Mid$( ss, nStart, nCRLF - nStart )       ' 期待する文字列ならループを抜ける       if sLine = PassWord0 then         ss = sLine         exit do       end if       ' 検索開始位置の更新       nStart = nCRLF + 2       nCRLF = InStr( nStart, ss, Chr$(13) + Chr$(10) )       ' CRLFが存在しないならループを抜ける     loop while nCRLF<>0   end if といった具合にします

すると、全ての回答が全文表示されます。

その他の回答 (1)

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

処理がコケていそうな箇所に『Debug命令』を埋め込んでF2のデバッグ実行をして見ましょう 実行が停止したらデバッグウィンドウの『ステップオーバー』ボタンで1行づつ実行を追いかけてみましょう 実行のされ方が期待通りでない場合はそのあたりのコードを投稿しましょう ファイルから読み込んだ際に改行など余分なコードの除去をしているのでしょうか # Zipファイルは見ておりません # ウィルス感染があるかも知れない物をダウンロードしようとは思いませんよ

if-so-at
質問者

補足

わかりました Dim hEdit As Long Dim hFile As Long Dim dwFileSize As DWord Dim dwAccessByte As DWord Dim FileName As String Dim buffer As BytePtr Dim Buffer As BytePtr Dim Length As Long Dim ss as String Dim ssPtr As BytePtr Length = GetWindowTextLength(GetDlgItem(hMainWnd,EditBox1)) Buffer = calloc(Length+1) GetWindowText(hMainWnd,Buffer,Length+1) ss = Str$( Buffer ) PassWord0=ss free(Buffer) 'Open先を設定 FileName=".\Date\Setting\setting.txt" '------------------- ' ファイル オープン '------------------- hFile=CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, _ ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) If hFile=INVALID_HANDLE_VALUE Then MessageBox(hMainWnd,Ex"ファイルが存在していません","Error(読み込みエラー)",MB_OK or MB_ICONWARNING) SendMessage(hMainWnd,WM_CLOSE,0,0) Exit Sub End If 'ファイルサイズを取得し、バッファを確保する dwFileSize=GetFileSize(hFile,0) buffer=malloc(dwFileSize+1) 'ファイルの内容を文字列変数bufferに読み込む ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0) buffer[dwAccessByte]=0 ss = Str$( buffer ) PassWord1=ss 'ファイル ハンドルを閉じる CloseHandle(hFile) free(buffer) If PassWord0 = PassWord1 Then MessageBox(hMainWnd,Ex"正解","",MB_OK or MB_ICONWARNING) Else MessageBox(hMainWnd,Ex"不正解","",MB_OK or MB_ICONWARNING) MessageBox(hMainWnd,PassWord1,PassWord0,MB_OK) SetDlgItemText(hMainWnd,EditBox1,"") SetFocus(GetDlgItem(hMainWnd,EditBox1)) End If

すると、全ての回答が全文表示されます。

関連するQ&A