忍者ブログ

[PR]

2025年07月02日
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

冷凍ハンバーグ アレンジレシピ

2020年04月21日
ふるさと納税のお礼の品が変更になり、冷凍ハンバーグが2kg届いた。

使い方に困っていただけど、ひき肉として使用するレシピをみて思いついた。


タコライスできるじゃん。


作り方は前回と同じ。たまねぎ切らなくていいのは楽だわ。
http://aki.p-kin.net/%E6%96%99%E7%90%86/%E3%82%BF%E3%82%B3%E3%83%A9%E3%82%A4%E3%82%B9

ひき肉がハンバーグに変わっただけ。
隠し味?にバターを追加。

簡単にできました。


反省
・ハンバーグに下味がついていたのでちょっとしつこかった
・フライパンで解凍はめんどくさいのでレンチンすればよかった


PR

タコライス

2020年04月15日
第二弾はタコライス。
思った以上に簡単なので、備忘録として投稿します。


まずタコミートを作る。

ひき肉・・・100g
ケチャップ・・・大さじ2
ソース・・・大さじ1
たまねぎ・・・1/4

ケチャップとソースを混ぜてフライパンに入れて
ひき肉とたまねぎを入れてを炒める。

皿にごはんとタコミート、とこけるチーズを乗せてラップをかけ
チーズが溶けるまでレンチン。

お好みで千切ったレタスとミニトマトを乗せて完成。


参考ページ
https://cookpad.com/recipe/1467554


タコミートの代わりにひき肉のそぼろを使ってもGood。
ひき肉にめんつゆと砂糖、酒を適量入れて炒める。

上と同様に作って、最後にケチャップをかけて完成。




焼き芋

2020年04月15日
おっさんになってから料理を作るようになりました。
個人的なメモ、手抜き料理の共有のために投稿します。

第一弾は、焼き芋。

めっちゃ簡単です。

さつまいもを炊飯器に入れて、
水を入れてスイッチON。

水か少ないと片付けが大変なので、
2合分以上は入れたほうがよい。

芋が大きくて炊飯器に入らない場合は
半分に切ってください。


ログデータの圧縮

2020年03月21日
今回はめっちゃ個人的な内容。

ログデータがでかいから必要な情報だけ取り出したい。

ログには、処理を開始したファイル名と
処理内容がつらつらと書かれているけど、
どのファイルにどんだけ時間がかかったかと
特定のキーワードの処理の番号をとりたい。

高速化のため、時間の範囲を絞る機能も盛り込んでどうやろか。。。

以下、ソース。やっぱDic配列便利だわぁ。

Option Explicit
Sub test()
    Dim Dic:    Set Dic = CreateObject("Scripting.Dictionary")
    Call LogNを解析(Dic, ファイル名取得())
    '   Call LogNを解析(Dic, "D:\Dropbox\VBA\WRN解析\20200320_1.log")
    Dim Items:  Items = Dic.Items
    
    Dim i As Long, j As Long, Vbuf
    Dim Arr() As String
    ReDim Arr(Dic.Count, 6)
    
    For i = 0 To UBound(Items)
        Vbuf = Split(Items(i), "‡")
        For j = 0 To UBound(Vbuf)
            Arr(i, j) = Vbuf(j)
        Next j
    Next i
    Range("A1").Resize(Dic.Count, 6) = Arr   ''1回だけ代入
     
End Sub
Sub LogNを解析(ByRef Dic, ファイル名 As String, Optional sTxt As String = "", Optional eTxt As String = "‡‡†‡‡")
    
    Dim i As Long, t As String
    Dim fCnt As Long, Fname As String
    Dim idCnt As Long, ID1 As String, IDN As String   'HAISIN_LIST.IDの数と最初と最後
    Dim T1 As String, TN As String
    Dim buf As String, Flag
    Dic.Add "title", "№" & "‡" & "日時" & "‡" & "Fname" & "‡" & "idCnt" & "‡" & "ID1" & "‡" & "IDN"
    Open ファイル名 For Input As #1
    Do Until EOF(1)
        Line Input #1, buf
        If buf Like "*" & sTxt & "*" And Flag = 0 Then
            Flag = 1  '書き込み開始
        ElseIf buf Like "*" & eTxt & "*" And Flag = 1 Then
            'Flag = 0    '書き込み終了
                    Dic.Add fCnt, fCnt & "‡" & t & "‡" & Fname & "‡" & idCnt & "‡" & ID1 & "‡" & IDN
            Exit Sub
        End If
        
        If Flag = 1 Then    '書き込み中
'            Debug.Print Buf
            If buf Like "*WRN*.txt*" Then   '条件はもっと細かくする必要あるかも
                If t <> "" Then 'tがあるなら格納できる
                    Dic.Add fCnt, fCnt & "‡" & t & "‡" & Fname & "‡" & idCnt & "‡" & ID1 & "‡" & IDN
                    idCnt = 0: ID1 = "": IDN = ""   '格納したら初期化
                End If
                '次のファイルに行くのでDic出力までやる
                fCnt = fCnt + 1 'ファイル№ = Dicキー
                t = Mid(buf, 25, 19)
                Fname = WRNファイル名取得(buf)
            ElseIf buf Like "*HAISIN_LIST.ID*" Then
                idCnt = idCnt + 1
                If idCnt = 1 Then ID1 = 配信リストID取得(buf)
                IDN = 配信リストID取得(buf)
            Else
                '何もしない
            End If
        End If  ' If Flag = 1 Then    '書き込み中
    Loop
    Close #1
    
    If fCnt > 1 Then Dic.Add fCnt, fCnt & "‡" & t & "‡" & Fname & "‡" & idCnt & "‡" & ID1 & "‡" & IDN
    
End Sub
Sub LogNを解析b(ByRef Dic, ファイル名 As String, Optional sTxt As String = "", Optional eTxt As String = "‡‡†‡‡")
    
    Dim i As Long, t As String
    Dim fCnt As Long, Fname As String
    Dim idCnt As Long, ID1 As String, IDN As String   'HAISIN_LIST.IDの数と最初と最後
    Dim T1 As String, TN As String
    Dim buf As String, Flag
    Dic.Add "title", "№" & "‡" & "日時" & "‡" & "Fname" & "‡" & "idCnt" & "‡" & "ID1" & "‡" & "IDN"
    Open ファイル名 For Binary As #1
    Do Until EOF(1)
        Line Input #1, buf
        If buf Like "*" & sTxt & "*" And Flag = 0 Then
            Flag = 1  '書き込み開始
        ElseIf buf Like "*" & eTxt & "*" And Flag = 1 Then
            'Flag = 0    '書き込み終了
                    Dic.Add fCnt, fCnt & "‡" & t & "‡" & Fname & "‡" & idCnt & "‡" & ID1 & "‡" & IDN
            Exit Sub
        End If
        
        If Flag = 1 Then    '書き込み中
'            Debug.Print Buf
            If buf Like "*WRN*.txt*" Then   '条件はもっと細かくする必要あるかも
                If t <> "" Then 'tがあるなら格納できる
                    Dic.Add fCnt, fCnt & "‡" & t & "‡" & Fname & "‡" & idCnt & "‡" & ID1 & "‡" & IDN
                    idCnt = 0: ID1 = "": IDN = ""   '格納したら初期化
                End If
                '次のファイルに行くのでDic出力までやる
                fCnt = fCnt + 1 'ファイル№ = Dicキー
                t = Mid(buf, 25, 19)
                Fname = WRNファイル名取得(buf)
            ElseIf buf Like "*HAISIN_LIST.ID*" Then
                idCnt = idCnt + 1
                If idCnt = 1 Then ID1 = 配信リストID取得(buf)
                IDN = 配信リストID取得(buf)
            Else
                '何もしない
            End If
        End If  ' If Flag = 1 Then    '書き込み中
    Loop
    Close #1
    
    If fCnt > 1 Then Dic.Add fCnt, fCnt & "‡" & t & "‡" & Fname & "‡" & idCnt & "‡" & ID1 & "‡" & IDN
    
End Sub
Function WRNファイル名取得(TextLine As String)
    Const Ln = 9
    Const keyText = ".txt"
    Dim pos As Long
    pos = InStr(TextLine, keyText)
    If pos < Ln Then
        WRNファイル名取得 = ""
    Else
        WRNファイル名取得 = Mid(TextLine, pos - Ln, Ln + Len(keyText))
    End If
End Function
Function 配信リストID取得(TextLine As String)
    Const Ln = 9
    Const keyText = "HAISIN_LIST.ID = "
    Dim pos As Long
    pos = InStr(TextLine, keyText)
    If pos < Ln Then
        配信リストID取得 = ""
    Else
        配信リストID取得 = Mid(TextLine, pos + Len(keyText), Ln)
    End If
End Function
Function ファイル名取得(Optional デフォルト As String = "")  'with ユーザー名取得
    If デフォルト = "" Then
        デフォルト = "C:\Users\" & ユーザー名取得() & "\Desktop"
    End If
    Dim i As Long
    '’https://excel-ubara.com/excelvba1/EXCELVBA376.html
    Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
    Dim FulName As String
    With Application.FileDialog(msoFileDialogFilePicker)
        '.InitialFileName = デフォルト
        .AllowMultiSelect = False
        .Filters.Clear
        .Filters.Add "すべてのファイル", "*.*"
        .Title = "ファイルの選択"
        If .Show = True Then
            FulName = .SelectedItems(1)
        Else
            MsgBox "キャンセルしました"
        End If
    End With
    Set FSO = Nothing
    ファイル名取得 = FulName
End Function
Private Function ユーザー名取得()
    Dim WshNetworkObject As Object
    Set WshNetworkObject = CreateObject("WScript.Network")
    ユーザー名取得 = WshNetworkObject.UserName
    Set WshNetworkObject = Nothing
End Function

テキストファイルを開くスピード

2020年03月21日
仕事でログの調査をするとき、
ログファイルのサイズが100MBあったりする。

otabeditで開けないこともないけど、
小さいファイルにまとめようと切り貼りしていると
メモリ不足の警告が出る。めんどくさ。


必要な情報は大したことないので、
欲しい内容をマクロで取り出そうかと。


今回は、本題に入る前にテキストファイルの読み込み速度について、
こんな記事をみつけて早速試してみた。


VBA テキストファイルの最も高速な読み込み方法

・OpenステートメントのBinaryモードにより一括バイナリ読み込み、Unicode変換が最も高速という結果になりました。
 まぁ当然ですね。配列化も簡単なので今後はこれをメインに使っていこう。

出展元
http://tetsucom.blogspot.com/2011/03/vba_9799.html



でかいテキストファイルがないので、
Dドライブの全ファイル、フォルダを書き出して作った。

コマンドプロンプトから
Dir /S D: > フルネーム.txt

ファイルのフルネームは、当該ファイルをコピーして
ファイル名を指定して実行のウィンドウにペーストすると出てくる。


出力結果は3Mぐらい。ちょっと小さめだけどまあいいか。

ついでにCドライブも試したら、10MB。


実行結果(10MB)
TextFileToBuf :2.0009765625
Line    :0.00390625
binary :0.154296875

実行結果(3MB)
TextFileToBuf :0.716796875
Line    :0.0009765625
binary :0.0654296875
記事に書いてあったバイナリよりも
1行ずつ読み込むLineInputのほうが圧倒的に早かった。むー。

【3/23追記】
54,618kBのファイルで再試験したところ、バイナリが最速でした。
TextFileToBuf :33.6
Line    :645.9
binary :6.2

以下、ソース。


Option Explicit
Sub Main()
    'ファイル選択ダイアログでファイルを指定
    Dim vFilePath As Variant, buf As String
    vFilePath = Application.GetOpenFilename
    Dim tictoc As Double
    tictoc = Timer
    buf = TextFileToBuf(vFilePath)
    Debug.Print "TextFileToBuf :" & Timer - tictoc
    tictoc = Timer
    buf = txtファイル読み込み_LineInput(vFilePath)
    Debug.Print "Line :" & Timer - tictoc
    tictoc = Timer
    buf = txtファイル読み込み_binary(vFilePath)
    Debug.Print "binary :" & Timer - tictoc
    
End Sub
Function ファイル名()
        Dim vFilePath As Variant
    vFilePath = Application.GetOpenFilename
ファイル名 = vFilePath
End Function
Function TextFileToBuf(FullName) As String
    Dim buf As String
    With CreateObject("Scripting.FileSystemObject")
        With .GetFile(FullName).OpenAsTextStream
            buf = .ReadAll
            .Close
        End With
    End With
    TextFileToBuf = buf
End Function
Function txtファイル読み込み_binary(vFilePath)
    If vFilePath = False Then
        txtファイル読み込み_binary = ""
    End If
    'ファイルサイズが0バイトの場合も処理終了
    Dim nFileLen As Long
    nFileLen = FileLen(vFilePath)
    If nFileLen = 0 Then
        txtファイル読み込み_binary = ""
    End If
    '指定されたファイルを取得したファイル番号としてバイナリモードで開く
    Open vFilePath For Binary As #1
    'ファイルサイズ分のバイト配列を用意
    Dim bData() As Byte
    ReDim bData(0 To nFileLen - 1)
    'バイト配列に指定ファイルを展開
    Get #1, , bData
    Close #1
    
    txtファイル読み込み_binary = StrConv(bData(), vbUnicode) 'Unicodeに変換
End Function
Function txtファイル読み込み_LineInput(vFilePath)
    If vFilePath = False Then
        txtファイル読み込み_LineInput = ""
    End If
    'ファイルサイズが0バイトの場合も処理終了
    Dim nFileLen As Long
    nFileLen = FileLen(vFilePath)
    If nFileLen = 0 Then
        txtファイル読み込み_LineInput = ""
    End If
    
    Dim buf As String, TextLine As String
    '指定されたファイルを取得したファイル番号としてバイナリモードで開く
    Open vFilePath For Input As #1
    Line Input #1, TextLine
        buf = buf & TextLine
    Close #1
    
    txtファイル読み込み_LineInput = buf
End Function