やる
visual studio 2022 同じソリューションに.Net Frameworkと .Net Core のクラスライブラリプロジェクトがあるとデバッガが混乱する
.Net Frameworkのプロジェクトでデバッグしようとしたら 以下のエラーがでた
致命的なエラーが発生しました。デバッグを終了する必要があります。 デバッガーは、Desktop CLR (.NET Framework) マネージド デバッガーを使用するように構成されていますが、 ターゲット プロセスは CoreCLR (.NET Core) ランタイムを読み込みました。このプロジェクトをデバッグするには、 'マネージド (CoreCLR)' デバッガーを使用するように構成してください。
クラスライブラリなのでそもそもデバッガーの指定がない。
.Net Coreのプロジェクトのフォルダ名をかえちゃうなど
一時的に.Net Coreプロジェクトを読み込めないようにしたらなおった。
めんどいけどレアケースってことなんでしょう。
HTML JAVAScript コンテンツをランダムでどっちかだけ出す(A/B)
<!DOCTYPE html> <html> <head> <title>ページのタイトル</title> </head> <body> <!-- ページのコンテンツ --> <div id="contentA">コンテンツA</div> <div id="contentB">コンテンツB</div> <script> document.addEventListener("DOMContentLoaded", function() { var contentA = document.getElementById('contentA'); var contentB = document.getElementById('contentB'); var random = Math.floor(Math.random() * 2); if (random === 0) { contentA.style.display = 'block'; contentB.style.display = 'none'; } else { contentA.style.display = 'none'; contentB.style.display = 'block'; } }); </script> </body> </html>
window.onload より
window.addEventListener("DOMContentLoaded", function() { ... }) を使用する方が良い場合があります。
window.onload と比較して、いくつかの利点があります。
速度: DOMContentLoaded イベントは、HTML が完全に読み込まれて解析された時点で発生しますが、スタイルシート、画像、サブフレームの読み込みは待ちません。一方、window.onload はページ上の全てのリソース(画像、スタイルシート、スクリプトなど)の読み込みが完了した後に発火します。そのため、DOMContentLoaded を使用した方がページがより早くインタラクティブになります。
柔軟性: 複数の DOMContentLoaded リスナーをページに追加できますが、window.onload を複数設定すると、前の設定を上書きしてしまう可能性があります。
python TOPIX500の銘柄を公式のPDFから抽出する
www.jpx.co.jp
ここの構成銘柄別ウエイト一覧のcsvが2023/9末で更新止まってしまってる
2023/11/8現在
TOPIXニューインデックスシリーズ定期選定結果(2023年10月31日)にあるpdfにだけまとまってたのでそこからとってみた
import pdfplumber # PDFファイルのパス pdf_path = r'C:\Users\hogehoge\Desktop\mei2_12_size.pdf' # 3. 構成銘柄一覧以下のテーブルからTOPIX500の銘柄のみを抽出 with pdfplumber.open(pdf_path) as pdf: # テーブルが始まるページを見つけるためのフラグ table_started = False # PDFの各ページを順に処理 for page in pdf.pages: # ページ内のテキストを取得 text = page.extract_text() # 特定のテキストがページに含まれているかチェックし、テーブルが始まるページを特定 if '3. 構成銘柄一覧' in text: table_started = True # テーブルが始まった後、続くページからテーブルデータを抽出 if table_started: # ページ内のテーブルを抽出 tables = page.extract_tables() for table in tables: # テーブルの各行を処理 for row in table: # 最後の列が指定されたテキストのいずれかを含むかチェック if row[-1] in ['TOPIX Core30', 'TOPIX Large70', 'TOPIX Mid400']: print(row[1], row[2]) # ここでのrow[1]はコード、row[2]は銘柄名を指す
C# edgeの指定タイトルもウインドウを探して、アドレスバーを取得して返す関数
/// <summary> /// 指定文字が含まれたEdgeウィンドウを監視して、URLを取得する /// </summary> /// <param name="sTitle"></param> /// <returns></returns> private static string MonitorEdgeWindowsForUrl(string sTitle = "127.0.0.1") { using var automation = new UIA3Automation(); string foundUrl = null; while (foundUrl == null) { try { // "msedge" プロセス名を持つすべてのプロセスを取得 var edgeProcesses = Process.GetProcessesByName("msedge"); // msedge プロセスが存在しない場合、"" を返す if (edgeProcesses.Length == 0) { return ""; } foreach (var process in edgeProcesses) { if (process.MainWindowHandle != IntPtr.Zero) { var windowElement = automation.FromHandle(process.MainWindowHandle); // ウィンドウタイトルに 指定文字列 が含まれているか確認 if (windowElement.Name.Contains(sTitle)) { // アドレスバーを取得 var addressBar = windowElement.FindFirstDescendant(cf => cf.ByControlType(ControlType.Edit)); if (addressBar != null) { foundUrl = addressBar.AsTextBox().Text; Console.WriteLine($"URL: {foundUrl}"); } else { Console.WriteLine("アドレスバーが見つかりませんでした。"); } // ウィンドウを閉じる windowElement.AsWindow().Close(); // ループ抜ける break; } } } } catch (Exception ex) { Console.WriteLine($"Error processing window: {ex.Message}"); } // Wait for a short duration before checking again System.Threading.Thread.Sleep(100); } return foundUrl;
Excelで無効にさせられてしまったアドインを再度有効にする方法
オプション>アドインの管理で「使用できないアイテム」を選んで「設定」をクリック。そこから有効にする
System.Web.Security.Membership.GeneratePassword() の代替 (.NET Coreや.NET 5/6)
System.Web.Security.Membership.GeneratePassword()メソッドは、指定された長さと非英数字文字の数でランダムなパスワードを生成するために使用されます。.NET Coreや.NET 5/6ではSystem.Web.Securityは利用できないため、同等の機能を持つ代替手段を使用する必要があります。
.NET 6でランダムなパスワードを生成するための一般的な方法は、RNGCryptoServiceProviderを使用してランダムなバイト配列を生成し、それを適切な文字セットに変換することです。
以下は、System.Web.Security.Membership.GeneratePassword()に似た機能を持つメソッドのサンプルです:
using System; using System.Security.Cryptography; using System.Text; public static class PasswordGenerator { private static readonly char[] PunctuationChars = "!@#$%^&*()_-+=[{]};:>|./?".ToCharArray(); public static string GeneratePassword(int length, int numberOfNonAlphanumericCharacters) { if (length < 1 || length > 128) { throw new ArgumentException("Password length should be between 1 and 128."); } if (numberOfNonAlphanumericCharacters > length || numberOfNonAlphanumericCharacters < 0) { throw new ArgumentException("Number of non-alphanumeric characters should be non-negative and less than password length."); } using (var rng = new RNGCryptoServiceProvider()) { var byteBuffer = new byte[length]; rng.GetBytes(byteBuffer); var chars = new char[length]; int nonAlphanumericCount = 0; for (int i = 0; i < length; i++) { int value = byteBuffer[i] % 87; if (value < 10) chars[i] = (char)('0' + value); else if (value < 36) chars[i] = (char)('A' + value - 10); else if (value < 62) chars[i] = (char)('a' + value - 36); else { chars[i] = PunctuationChars[value - 62]; nonAlphanumericCount++; } } for (int i = 0; i < length && nonAlphanumericCount < numberOfNonAlphanumericCharacters; i++) { int punctuationIndex = byteBuffer[i] % PunctuationChars.Length; if (char.IsLetterOrDigit(chars[i])) { chars[i] = PunctuationChars[punctuationIndex]; nonAlphanumericCount++; } } return new string(chars); } } }
.NET5以降でExcelのRTDServer実装方法 C#
もう.NET Frameworkは捨てないといけない
regasmはもう要らない。
.csprojで
<EnableComHosting>true</EnableComHosting>
追加してビルド。
するとhoge.comhost.dllというDLLができるので、これをregsvr32.exeで登録。
大事なのはExcelが32bitなら32bit版のDLLを作って 32bit版のregsvr32.exeで登録すること。
Excelが64bitなら64bit版のDLLを作って 64bit版のregsvr32.exeで登録すること。
ビルド後のイベントでregsvr32登録いれとくと便利(これは32bit環境例)
C:\Windows\SysWOW64\regsvr32.exe /s "$(TargetDir)\hoge.comhost.dll"
.csprojで以下追加すれば32/64bitビルドを切り替えられる。
ただし構成マネージャーでちゃんとx86/x64をつくっておくこと。AnyCPUのままだとこの分岐が意味なくなる
<PropertyGroup Condition=" '$(Platform)' == 'x86' "> <PlatformTarget>x86</PlatformTarget> </PropertyGroup> <PropertyGroup Condition=" '$(Platform)' == 'x64' "> <PlatformTarget>x64</PlatformTarget> </PropertyGroup>
$(Platform)などの値がなにはいってるのか見るなら、.csprojで以下のように追加する
<Target Name="DisplayPlatformShortName" AfterTargets="Build"> <Message Text="Platform is: $(Platform)" Importance="high" /> <Message Text="PlatformShortName is: $(PlatformShortName)" Importance="high" /> <Message Text="Configuration is: $(Configuration)" Importance="high" /> </Target>
出力を"詳細"にしないと見えない。
ツール>オプション>プロジェクトおよびソリューション>ビルドして実行>MSBuildプロジェクトビルドの出力の詳細 = 詳細
RTDServer自体のサンプルはここをそのままでOK.
Guidは変えてね
batファイルからpowershellのスクリプト実行
powershell.exe -ExecutionPolicy Bypass -File "パス\スクリプト名.ps1"
vbsの死が確定してしまったのでps1に引っ越ししていかなくては。
pythonでWTI原油先物価格の取得方法
import yfinance as yf data = yf.download("CL=F", start="2020-01-01", end="2021-01-01")
"CL=F" は Yahoo Finance のティッカーシンボルで、西テキサス中間(WTI)の原油先物の価格を表しています。WTI原油は、北アメリカの主要な原油のベンチマークであり、主にCME GroupのNYMEX取引所で取引されています。
Yahoo Finance などの金融データプラットフォームでは、各銘柄や商品に固有のティッカーシンボルが割り当てられており、これを使用してデータをクエリすることができます。"CL=F" は、特に Yahoo Finance 上で WTI 原油先物の価格を参照するためのティッカーシンボルとして使用されます。