C#, C♯, C#相談室 Part96

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 7633-kUv4)
垢版 |
2021/12/20(月) 11:03:25.88ID:sdn/+VfW0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/08/13(土) 00:12:15.52ID:bvO6Jh/U0
>>392 >>395
ちょっとイメージつかんから具体例教えて
2022/08/13(土) 04:27:04.87ID:OsxM9aZ0a
>>396

https://cpp.aquariuscode.com/preincriment-vs-postincriment
2022/08/18(木) 12:03:10.49ID:4iAYLuqc0
.Net Core以上だとビッグエンディアン環境にも対応するようだけど、ターゲットOSをWindowsにしてビルドする限りは100%リトルエンディアンって認識で大丈夫?
窓用である限り絶対にLEであるならLEなバイナリファイルに対してポインタ使いたいんだけど
2022/08/18(木) 12:14:08.73ID:1q98B+xd0
そこまで実行環境限定できないなら
Main直後にエンディアン調べてビッグエンディアンでは動きませーんってメッセージだしときゃいいんじゃね
今なくても未来永劫ないとはいえんわけだし
2022/08/18(木) 12:14:49.68ID:nbqSIqDKM
いいのでは
っていうか、今の時代のビッグエンディアン環境ってどんなんだろ
2022/08/18(木) 12:26:04.24ID:zre7odKUa
ネットワークバイトオーダーは死んだのか
402デフォルトの名無しさん (ササクッテロル Spf1-18Wl)
垢版 |
2022/08/18(木) 13:30:14.03ID:oAeyX7Mzp
国葬されました
2022/08/18(木) 15:34:48.73ID:SUTQRi3H0
反対します!
2022/08/18(木) 16:39:49.05ID:X/mZUHYK0
>>400
汎用機で動かすとか
2022/08/18(木) 17:19:03.68ID:PFNC2u5+0
>>400
powerpc とか
2022/08/18(木) 18:28:37.54ID:q5oXxkWm0
64bitの時代でもリトルエンディアンとか関係あるのか
バイナリデータを直接操作する用途以外は関係ないんじゃないの
2022/08/18(木) 19:20:00.05ID:PFNC2u5+0
I/Oが一切発生しないコンピューターならそうかもな
2022/08/19(金) 00:53:24.27ID:OSKKwF+I0
バイナリ「データ」のファイルなら、自分でフォーマット決めとけばいいだけじゃ?

コードを直接バイナリファイルでどうこうするって話?
.NETのプログラムってVM上で動いていると思ったんだが、CORE以降だと違うのか?
2022/08/19(金) 06:05:35.26ID:MAIXTOEK0
>>408
自分でフォーマットを決められないケースもあるでしょ
例えばリンカー、実行ファイルのフォーマットはOSなどで規定されてるからそれに沿って出力しないとダメでしょ
2022/08/19(金) 06:23:56.59ID:YuhQFNoo0
マシン語やアセンブリ言語だと
CPUの仕様によってコードの並び順を考えなきゃいけないだろうが
C#ではコンパイラで全部やってくれるから気にしなくて良いんじゃないの
2022/08/19(金) 07:13:48.79ID:QMISJLeVa
なにをいってるんだ
2022/08/19(金) 19:22:41.70ID:CKALhjuSM
バイナリファイルがあってそれがビッグエンディアンかリトルエンディアンか分かってないなら
どちらにしても意味がない

プログラムがとかc#がとかいう前の段階
2022/08/25(木) 12:01:45.09ID:Kj4JFaopa
>>408
VM上で動くのはJava
.NETは中間言語を実行時にネイティブ言語にコンパイルしてそれが直接動く
2022/08/25(木) 12:06:29.77ID:Kj4JFaopa
>>393
ほんとか?
static int iはiが0だから式全体が定数にコンパイルされてその結果を使ってないから消えるんじゃね?
あとi++と++iは左から順に評価されると保証されてんの?
2022/08/30(火) 23:48:03.75ID:wcZ40xDv0
IEnumrable<T>に.ForEach拡張がデフォルトで用意されてないのは端的に言って何故?
List<T>にはあるのに
↓の問題は?速度?

public static void ForEach<T>(this IEnumerable<T> items, Action<T> action) {
 foreach (var item in items) {
  action(item);
 }
}
2022/08/31(水) 00:06:13.35ID:IP5lcB3x0
>>415
開発者の好み
https://ericlippert.com/2009/05/18/foreach-vs-foreach/
417デフォルトの名無しさん (スップ Sdea-TRym)
垢版 |
2022/09/12(月) 18:39:52.16ID:Ws5FMSEUd
ソートの質問です。

タブ区切りのCSVファイルを1行ずつそのままlistに入れた後、list の区切り[16]と[17]に数字が入っていてこれを[17]優先、次に[16]で降順ソートがしたいです。
調べるとラムダ式という便利そうなものが引っかかるのですが、区切って使用することは出来るんですかね?
2022/09/12(月) 18:48:00.24ID:pGdD9pkE0
CSVをそのまま使うんじゃねえ
読み込んだらパースしてオブジェクトに直せ
パースはstring.splitとか使ってるやつ多いがバグを防ぐためにcsvhelperとか使え
2022/09/12(月) 21:33:05.70ID:57KFzM310
>>417
var sorted = File.ReadAllLines("data.csv").Select(line => line.Split(',')).OrderByDescending(x => int.Parse(x[17])).ThenByDescending(x => int.Parse(x[16]));
2022/09/12(月) 21:37:18.87ID:57KFzM310
タブ区切りか
それTSVやん
まあソートの方が要点だろうからパースの方はご自由に
2022/09/12(月) 21:41:44.89ID:WJNzCKdga
tsvはcsvの一種だがどうしてお前らはsplitを使いたがるんだ
2022/09/12(月) 21:49:03.68ID:LNujs6wk0
区切りが制御文字だったらまぁ許せる
423デフォルトの名無しさん (ワッチョイ 3abd-TRym)
垢版 |
2022/09/12(月) 23:47:17.20ID:dk7j9tfb0
>>419
これで読み込んでソートまでいけるんですか?凄いですね。
明日試してみます。ありがとうございます。
2022/09/13(火) 01:03:32.30ID:8hsXm+8m0
今度はsortedが文字列になってないと言い出すぞ
2022/09/13(火) 09:51:22.32ID:ezVKzpwg0
>>423
File.ReadAllLines("data.csv").Select(line => line.Split(','))
↑ここまでがcsvをカンマで区切るコードでタブ区切りならSplit('\t')に変えてね
上で言われてるようにSplitだとセル内文字として'\t'が入ってると全てズレてきてしまうのでガチでやるなら専用のパーサーライブラリに頼るべきだが
2022/09/13(火) 12:26:30.00ID:I78luoMLM
手抜きCSV実装はバグの元なのでライブラリ使え
規格に沿って真面目に実装するとそれなりに面倒
2022/09/13(火) 12:40:20.37ID:IWUAvQuR0
csvの標準って無かったはずだけど?
infoのrfcのこと言ってる?
2022/09/13(火) 12:43:16.28ID:OYU/TjHO0
csvはsuper calc のデータ形式
2022/09/13(火) 18:29:27.33ID:N+nHMRy40
Microsoft.VisualBasic.FileIO.TextFieldParser がお勧め。
本来はVB用のライブラリだが普通にC#からも呼び出せる。
2022/09/13(火) 19:05:00.69ID:Q9r0zfg80
何がおすすめなんだか…
2022/09/13(火) 19:09:49.55ID:zXX+ut2QM
dllがいらない!
2022/09/13(火) 19:13:35.91ID:u48XvMAP0
フィールドに改行もダブルクォートもカンマも使わんならSplitでええけど
そうじゃないならCSVHelper使っとけ
2022/09/14(水) 00:45:14.45ID:Y/jBtdol0
Ruby で作った

タブ区切りの入力ファイル・input.tsv が以下の時、
-1 1.1
-2 -2.2
5 1.1
3 3.3
1 1.1

require 'csv'

# タブ区切りで、:numeric は、:integer と :float の組み合わせ
options = { col_sep: "\t", converters: :numeric }

table = CSV.read( "input.tsv", options )

sorted_ary = table.sort_by do |col_0, col_1|
[ col_1, -col_0 ] # col_1 の昇順で、col_0 の降順
end

p sorted_ary

出力
[[-2, -2.2], [5, 1.1], [1, 1.1], [-1, 1.1], [3, 3.3]]
2022/09/14(水) 01:24:45.04ID:ZnLQmmJg0
ルビ基地
2022/09/16(金) 14:23:45.81ID:zgH3cb2a0
>>427
ExcelのCSVが扱えれば問題はまずおきない
2022/09/16(金) 15:43:00.15ID:wH2I1UzM0
Excelのセル中途中改行、途中ダブルクォーテーション、途中¥
の全てが複雑に1つのセルに入ってても問題なくExcelと同じ解釈になるのが、事実上の要件やろな。
2022/09/16(金) 16:31:46.42ID:1woCku44a
カンマと改行と"を何らかの方法でエスケープすればスプリットでも問題ないな
CSV化はエンコーディングした文字列をstring.Joinでカンマ区切り
読み取りはカンマでスプリットした後デコード
エンコーディングにBASE64とかパーセントエンコーディングが使えれば面倒無さそうな気がしたがどっちも半角記号をそのまま通すからだめだわ
自作しても大した手間はかからんけどCsvHelper使う方が明らかに楽だからなあ
あとExcelで開いて文字化けと思われる可能性も無くはない
2022/09/16(金) 16:48:41.84ID:HkImjBxjM
今更熱く語られても
2022/09/16(金) 16:50:44.61ID:1woCku44a
>>437
正規表現とDictionary<T>を使えばもう少しはエレガントに書けるし速度のためにはLengthの倍の大きさのバッファを用意してSpan<char>を使うべきなのかもしれないけどイメージとしてはこんな感じ
string Encode(string src) => src.Replace("=", "==").Replace("\r", "=r").Replace("\n", "=n").Replace(",", "=c").Replace("\"", "=q");
2022/09/16(金) 17:21:16.73ID:1woCku44a
>>438
今更だからだよ
質問したやつが本気にしなくて済むタイミングでないと使う可能性があるだろ
こういう時は脳死でCsvHelper使っとけばいい
VBのやつはいつまで使えるかわからん
2022/09/16(金) 17:43:17.46ID:w5ho8AuvM
自転車置き場の議論
2022/09/16(金) 17:57:18.47ID:1woCku44a
5chで重要な議論をするわけがないだろw
2022/09/16(金) 18:08:05.17ID:w5ho8AuvM
なるほど
2022/09/16(金) 19:21:46.56ID:ScWWmq7w0
>>437
独自エスケープみたいな加工するくらいなら、そもそもCSVである必要すらない
ライブラリ使うか、CSV形式をやめるかどちらかだ
2022/09/17(土) 10:51:42.40ID:vRd8nzJr0
まあ独自フォーマットが選べるならJSON使え、CSVでなきゃいけないのならCsvHelper使え、で済む話ではある
2022/09/17(土) 13:19:53.78ID:mojlhM6K0
固定長形式でオススメのライブラリある?
2022/09/17(土) 13:59:36.21ID:TWFffCR9a
sscanf
2022/09/17(土) 15:15:20.11ID:AHjbVUjh0
nugetをfixedで検索して、ダウンロード多い奴でそれっぽいの探してみりゃいいんじゃね
2022/09/17(土) 17:41:50.72ID:HhHvs5OGa
固定長ならstruct割り当てて文字列はnew string(Span<T>)すればいいやん
450デフォルトの名無しさん (スッップ Sdbf-6Fps)
垢版 |
2022/09/20(火) 06:26:16.07ID:PUPPAQzJd
var 〇〇
これってなんでも型ってことですか?ネットで検索するとよく見かけるんですが使い分けとかあるんですか?
2022/09/20(火) 07:05:14.47ID:OoIkmPQF0
>>450
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/var
2秒で見つけた
2022/09/20(火) 09:47:17.09ID:Mh2Dy9Lg0
ググって2秒で合点
2022/09/20(火) 10:49:28.97ID:2fXkGtCja
NHKおはスポ
2022/09/26(月) 15:02:13.04ID:DEOTfi9Xa
int[] A = new int[100];
A[i]にfor文で0-9番目の要素まで数値格納
Array.Sort(A);

これやるとAの0-89番目の要素が0になって肝心の入力が後ろに行ってしまう

int[] AA = A.where(item => item != 0).toarray();
に配列を作り直すと入力が0だとそれも消してしまう…
何かいい方法ありますかね…
最初からListつかって以外で
2022/09/26(月) 15:08:44.66ID:7QDEX4sS0
イマイチよくわからんが
Array.Sort(Array, int, int)
で部分ソートすればいいって話?
2022/09/26(月) 15:23:09.99ID:DEOTfi9Xa
あっ、部分ソート
どうもです!
457デフォルトの名無しさん (スッップ Sd32-xTiZ)
垢版 |
2022/09/28(水) 18:24:51.59ID:MnFbtzLdd
フォルダ削除する際に、削除するフォルダを誰かがそのフォルダを開いてる?使用してる状態だとエラーになるのを防ぐ対処法って何かありますか?
2022/09/28(水) 18:32:29.06ID:rizFYsT00
そのエラーが例外なら例外処理すればいいんじゃないの?
2022/09/28(水) 20:19:12.00ID:aJu8BTJb0
エラーを起こさずに無理やりにでも消す方法はありませんか?と聞いていると思われる
俺は知らない
2022/09/28(水) 20:53:16.80ID:Oe+Nnyr70
MoveFileEx
2022/09/28(水) 21:10:08.01ID:rizFYsT00
他のプロセスが読み書き中に外部から消せたらヤベーだろ常識的に考えて
削除失敗後のエラー処理頑張るしか無いんじゃない
2022/09/28(水) 21:26:58.56ID:0sCmeNkX0
掴んでるプロセス特定してブッ殺すとかかな
2022/09/28(水) 21:32:08.42ID:9HUYdTWA0
アンドロイドアプリの開発してるならだいたいadbのせい
powershellでps adb|killとやると削除できるようになる
それでも削除できなければリソースモニターのハンドル検索にフォルダ名を入れれば出てくる
2022/09/28(水) 22:47:12.34ID:KUCGozzI0
誰かがって言ってるんだから、サインインしてる他の人アカウントか、共有ドライブとかの話じゃないの?
2022/09/29(木) 01:13:17.88ID:i5N1SLmK0
深読みしすぎだろ
例外の対処の仕方が判らんだけだと思うが
2022/09/29(木) 03:06:21.45ID:FmkzzHbo0
linux環境のmonoなら開いてるファイルだろうが消し放題なのでは
2022/09/29(木) 07:29:06.13ID:nA4Nikqb0
こういう「何が言いたいのか日本語レベルでわからん質問」を投げて回答しようとした人たちが首をひねってるのを見て何も言わない質問者って何なんだろうな
コミュ障すぎるだろ
2022/10/10(月) 11:08:17.10ID:G8ljNDHoa
bool isTrue;

if (isTrue) isTrue = false; // ブロック無し
else return;

// 処理

isTrue = true; // ここから
return; // ここまでの間は気にしない

これってスレッドセーフになってくれますか?よろしくお願いします!
2022/10/10(月) 11:36:03.26ID:C38R1GQo0
isTrueがローカル変数じゃないならなってないな
2022/10/10(月) 11:38:57.59ID:sJsMwDUU0
>>468
> if (isTrue) isTrue = false; // ブロック無し
> else return;
典型的なダメコード
> if (isTrue)

> isTrue = false;
の間に他のスレッドが割り込んだらおかしくなるだろ
2022/10/10(月) 11:48:20.15ID:G8ljNDHoa
ならないですよねぇ…都合良すぎました…
ありがとうございました!
472デフォルトの名無しさん (アウアウウー Sa2f-ndxx)
垢版 |
2022/10/11(火) 12:23:42.52ID:bRmHnhd0a
lockすりゃええ
2022/10/14(金) 00:13:37.18ID:dssbvtnEM
デリゲートのPredicateの使いどころを教えて下さい
Funcの戻り値をboolにしたのと同じじゃないですか?
2022/10/14(金) 00:35:51.18ID:t5o5qpLS0
昔はFuncが無かった
2022/10/14(金) 10:05:51.78ID:z67nBqm+a
C#2.0くらいの話かな?
2022/10/14(金) 10:15:21.57ID:t5o5qpLS0
>>475
https://learn.microsoft.com/ja-jp/dotnet/api/system.func-2?view=net-6.0
.NET Framework 3.5かららしいぞ
Predicateの意味がわからんとしたらEventHandlerも意味わからんのだろうな
それAction<object,EventArgs>と同じじゃないですかって
同じだよ
2022/10/23(日) 12:14:33.77ID:y2RRMcrVM
単一バイナリビルドってEXEはできるけどDLLはできないのかな
478デフォルトの名無しさん (シャチクモバ MM0d-Y/ct)
垢版 |
2022/10/25(火) 16:14:21.86ID:2SxwmPbyM
超初心者+わかりにくい文章で、ごめんなさい。
今までは、.NetFramewor4.72でWinFormを使って実装していました。

今、.Net6.0 の WinFormで実装する必要が出てきたので

.Net6.0 で実装しています。
.NetFramewor4.72 でWindowsBaseの参照の追加で使えていた
System.Windows.Threading.Dispatcher が

.Net6.0 では、「依存関係」の「COM」で設定しようとしても、
WindowsBaseが表示されず、WindowsBaseを設定できなくて
System.Windows.Threading.Dispatcherが使えなくて、困っています。
同じような課題を諸先輩方は
どのように解決されましたか?
2022/10/25(火) 16:30:57.64ID:PDW864Oy0
>>478
バージョンは正確に。4.7.2ね。
Dispatcher.Invoke()を使いたいってことなんだろうけど、これはかなり古い方法。
async、awaitを使うか、TaskとTaskScheduler.FromCurrentSynchronizationContext()を使う。
480デフォルトの名無しさん (シャチクモバ MM0d-Y/ct)
垢版 |
2022/10/25(火) 16:49:48.49ID:ffh4XuaFM
>>479
アドバイスありがとうございます。

バージョンは、4.7.2です。
いただいた内容で考えてみます。
2022/10/25(火) 16:54:27.68ID:+gAuWxch0
>>478
stackoverflow.com/questions/68300971/wpf-dispatcher-for-dotnet-5
.NET 5の話だけど、6でも同じはず
プロジェクトファイルに
<UseWPF>true</UseWPF>
を追加する
482デフォルトの名無しさん (ワッチョイ 7e02-Y/ct)
垢版 |
2022/10/25(火) 19:59:37.22ID:cA91aZUZ0
>>481
コメントありがとうございます。

478です。
現在すすめているのが、
Winformで進めているんです。

アドバイスいただいた内容を参考にしてみます。
2022/10/25(火) 20:27:27.77ID:SCdeTm/W0
>>482
<UseWPF>true</UseWPF>
<UseWindowsForms>true</UseWindowsForms>
この両方をtrueでいいんだよ
cf) //learn.microsoft.com/ja-jp/dotnet/core/project-sdk/msbuild-props-desktop#enable-net-desktop-sdk
484デフォルトの名無しさん (ワッチョイ 7e02-Y/ct)
垢版 |
2022/10/25(火) 22:50:11.68ID:cA91aZUZ0
>>483
プロジェクトファイルに
<UseWPF>true</UseWPF>
<UseWindowsForms>true</UseWindowsForms>

両方を追記しましたら、

using System.Windows.Threading;
が使えるようになり、
Dispatcher
も使えるようになったみたいです。

アドバイス本当にありがとうございます。
m(_ _)m
2022/10/26(水) 08:18:16.62ID:QUWxQbjk0
こういう質問って仕事なんかなぁ。
2022/10/26(水) 08:22:23.52ID:HZuVvHGf0
初心者が仕事で振られるにしちゃボトルネックだから違うんじゃね
そいつができないと他全員することない
487デフォルトの名無しさん (ワッチョイ 895f-Y/ct)
垢版 |
2022/10/26(水) 16:16:56.80ID:V1iY34//0
初心者が問題解決するまで先輩たちは休憩室で麻雀打ってるよ
488.NET MAUI HighScool (ワッチョイ 1301-cPfV)
垢版 |
2022/10/31(月) 18:17:47.74ID:jJ3XoyNs0
今日知ったんだがSilk.NETってものがあるみたいね
これ一つでマルチメディア系のものを使用できるようになるみたい
OpenGLやDirectXとか
いかんせん情報ないけどどんな感じなんだろうか?
https://dotnet.github.io/Silk.NET/
2022/10/31(月) 19:05:37.95ID:s4vtF5Hi0
大体マイナーなライブラリは情報が殆どないから
githubのサンプルやデモ(あれば)を実際に動かしてみるしかないんじゃね
490.NET MAUI HighScool (ワッチョイ 1301-cPfV)
垢版 |
2022/10/31(月) 19:36:25.67ID:jJ3XoyNs0
>>489
一応サンプルやチュートリアルはあるからやってみるかな
マルチプラットフォーム対応は俺からしたら注目度高い
.NET MAUIでも使えるのか知らんけど(Xamarinはいけるらしい)
2022/11/03(木) 11:12:57.19ID:JkKs3AuYa
<Frame>
<カスタムコントロール>
<Label/>
<Label/>
<Label/>
</カスタムコントロール>
</Frame>

wpfでこの構成のlabelからダブルクリックイベント取得する方法教えて

単純にイベント追加するだけじゃ取れなかった。バブリング、トンネリング、添付イベント辺りが関係有りそうだなぁと思って色々調べたんだけどよく分かんなくて
492.NET MAUI HighScool (ワッチョイ 0901-cPfV)
垢版 |
2022/11/03(木) 11:14:57.35ID:P57hKE9o0
ラベルじゃなくてフレームにイベントつければ?
2022/11/03(木) 11:17:49.64ID:JkKs3AuYa
そうするとラベルがある場所以外でイベント拾っちゃう
どのラベルがクリックされたのかが欲しい
2022/11/03(木) 11:22:47.19ID:JkKs3AuYa
カスタムコントロールじゃなくてユーザーコントロールだった
2022/11/03(木) 11:25:48.48ID:0QCo1mM00
ラベルはマウスイベントなんか受け取らんだろ
ラベルのテンプレートを挿入したコントロールを作れ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況