ふらっと C#,C♯,C#(初心者用) Part128 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/05/02(火) 22:05:40.13ID:OPFlvhxj
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part127 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1489498042/

■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1492843013/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2017/05/18(木) 05:13:30.48ID:plBfXEwH
>>240
仮にそうだとして回避する事って出来るんですかね?
2017/05/18(木) 05:20:15.27ID:plBfXEwH
こうやってみたけどダメでした… 無理かな…
[DllImport("Kernel32.dll", CharSet=CharSet.Unicode, EntryPoint="GetPrivateProfileStringW")]
2017/05/18(木) 05:51:43.24ID:3q2usjgF
無理かどうか以前にGetPrivateProfileStringで30000文字読み込むなんていう仕様がおかしい気が・・・
2017/05/18(木) 05:53:36.76ID:plBfXEwH
>>243
マニュアルには2000以降は制限なしって書いてるのに制限かかるのが不可解で…
2017/05/18(木) 06:21:12.42ID:3q2usjgF
どこにそう書いてあるのか知らないけど自分の環境で試してみたら60000文字以上でも読めたよ
2017/05/18(木) 06:22:38.85ID:plBfXEwH
>>245
え〜そのコードおしえてください!
2017/05/18(木) 06:37:59.18ID:3q2usjgF
sizeにバイト数ではなく文字数を渡しているとか?
2017/05/18(木) 06:49:20.83ID:plBfXEwH
>>247
それでした…orz
半日悩んだ結果がこれ…orz
2017/05/18(木) 06:56:20.37ID:plBfXEwH
>>247
いやそういう事でもやっぱないような…
これでいいんですよね??
StringBuilder temp = new StringBuilder(99999999);
GetPrivateProfileString(Section, Key, "", temp, 99999999, path);
2017/05/18(木) 07:15:48.86ID:3q2usjgF
バッファの終端はNULL文字になるからそれだと99999998バイトまでしか読めないみたいよ
MSDNにその辺りのことが書いてある
99999999が仕様なら仕方ないけど、そうでないなら長さはちゃんと決めないとトラブルの元になるよ
2017/05/18(木) 07:26:40.34ID:plBfXEwH
>>250
というかよくわからないのが
WritePrivateProfileString()は最初の一回は30000文字以上でも書き込めるけど
2回目に試しに上書きしてみようとしてもうまくできないんですよね…
""空文字を設定してもダメみたいで…
一旦30000文字以上を書き込むと上書きも出来なくなります。
これReadPrivateProfileString()が読み込めないのと何か関係してるのかな…
意味が分からない…
2017/05/18(木) 07:39:10.95ID:3q2usjgF
フラッシュしても駄目?
2017/05/18(木) 07:39:21.49ID:bq0WS2qT
INIファイルはWin16の頃の遺物だからそんなでかい文字列を扱ってトラブルになるのも仕方ないと思う
ってかMSDN見ても30000文字以上扱えるという記述ないけど
2017/05/18(木) 08:00:42.55ID:plBfXEwH
>>252-253
https://msdn.microsoft.com/ja-jp/library/cc429770.aspx

これと勘違いしてた…
でもこれがいけるならGetPrivateProfileStringもいけないの?
2017/05/18(木) 08:26:32.47ID:plBfXEwH
>>253
今VC++からも読み込んでみたんですがどうやら勘違いでした。
31487文字までしかどうやっても読み込めませんでした。
GetPrivateProfileString()自体にやっぱ制限があるようです。
2017/05/18(木) 08:27:25.66ID:Za5q7uI4
なんでそんな限界に挑戦したいの?
どんな環境でも動くようにしたくないのか?
2017/05/18(木) 08:43:47.28ID:0yP1j9dj
iniファイル使わざるを得ない事情があるんだろうけどそれならAPIより.NETライブラリ探したほうがいいんじゃないの
2017/05/18(木) 08:48:31.58ID:plBfXEwH
>>256
古いアプリのファイルを読み込みたくて
>>257
何かよいソースないかさがしてみます。
最悪自力で読み込もうと思います。
2017/05/18(木) 09:01:56.00ID:bq0WS2qT
>>258
ソースから探さなくてもnugetでiniパーサー見つかるでしょ
2017/05/18(木) 10:22:47.93ID:bBEBMsWX
iniファイルなんて自分で読み書き出来るだろ
2017/05/18(木) 10:29:06.99ID:plBfXEwH
>>259
なるほど。
>>260
そうですよね。
2017/05/18(木) 18:13:55.78ID:kDiQJ8Uz
ビットフィールドないのけ?
あと固定長も

unsafeなんか入れたくないけど結構使うもん?
gchandleとmarshalでsafeにやった方がいいのかunsafe使いまくっても全然問題ないのか
みなさんの方針を教えてください
2017/05/18(木) 18:17:39.04ID:OCXcI4ec
>>262
32ビット固定とかなら好きに使えよ
marshalはよく使うがunsafe使う必要に迫られたことないな
2017/05/18(木) 19:01:17.54ID:nGaj6J50
>>262
BufferでもBitArrayでもBitVector32でも好きに使えや
2017/05/18(木) 19:28:28.05ID:POnkIYdd
クロージャだの非同期タスクだの高レベルなことは各言語記述性高まってるけど、
エンディアン指定してビット長さ指定してビットフィールドとか
そういう低レベルなことを簡単に記述できる方向の進歩って少ないよね…

30年前と同じにシフトしてマスクして足すという
2017/05/18(木) 20:08:12.45ID:Zif2rhHO
>>255
Windows NT 4 の頃に WritePrivateProfileString( ) をガンガン使ってたらたまに戻ってこないことがあったので、マイクロソフトにインシデント使って問い合わせたらすったもんだの末に「仕様です」って言われた w
もうその頃から捨てたがってるのがありありだったわ
2017/05/18(木) 20:26:56.52ID:kDiQJ8Uz
>>263-4
32ビット境界になってればいいけど…
そこまでまだ見てないけど多分なってないんだよなぁ
取り敢えずその辺当たってみるわありがとさん!
2017/05/18(木) 21:23:53.78ID:bBEBMsWX
>>266
ガンガンって一秒当たり1000回くらいコールしたの?
2017/05/18(木) 22:11:18.52ID:anTKPcsr
>>265
高レベル低レベルっていうより需要とか汎用性の問題だと思いますが
2017/05/18(木) 22:40:26.48ID:K0KmS8r5
>>268
最大数十回程度だったと思う
ただ24時間運用の機器だったから再現テストがめちゃ大変だった
最後は自前で読み書きを実装した
2017/05/18(木) 23:10:55.63ID:anTKPcsr
>>270
iniに記録する類の情報なんかアプリ終了時の保存しようよそもそもw
いきなり電源落ちたら困る?
そういうのはハード(UPSとか)で対応しなきゃw
2017/05/19(金) 09:25:16.90ID:v7TM541h
下記のような処理をスマートに書くとどうなるでしょうか
for (int i = 0; i< 100; i++){
if (i< 50){
for (int j = 0; j< 20; j++){
if (j< 10){
hoge[idx] = 1;
}else{
hoge[idx] = 2;
}

idx++;
}
}else{
for (int j = 0; j< 20; j++){
if (j< 10){
hoge[idx] = 3;
}else{
hoge[idx] = 4;
}

idx++;
}
}
}
2017/05/19(金) 09:49:36.16ID:K2XF16mV
>>272
その前に質問をスマートに書き込む技術を身に付けるのがいいぞ
2017/05/19(金) 10:06:13.31ID:7kp/CVMp
痩せろデブ
2017/05/19(金) 10:06:42.03ID:EmkjUD+o
>>272
const int COUNT = 2000;
int idx = 0;
int[] hoge = new int[COUNT];
var tmp = Enumerable.Range(idx, COUNT).Select(x => x / 10 % 2 + x / 1000 * 2 + 1).ToArray();
Array.Copy(tmp, 0, hoge, idx, COUNT);
idx += COUNT;
2017/05/19(金) 10:14:56.08ID:+DeJpQeQ
>>272
lengthとかcountなりプロパティ使えや
2017/05/19(金) 10:50:07.32ID:4KQhVkeZ
>>272
定数どうにかするべき
2017/05/19(金) 11:06:00.52ID:L+aVTlDX
ListでAddして行って後からToArrayにするのどうよ
2017/05/19(金) 12:43:58.87ID:prKcdFJm
>>272
こんな感じ?
aはない方がいいかも

Action<int> a = (x) =>
{
  hoge[idx] = x;
  idx++;
};

Action<int, int> a2 = (first, second) =>
{
  for (int i = 0; i < 10; i++) a(first);
  for (int i = 0; i < 10; i++) a(second);
};

for (int i = 0; i < 50; i++) a2(1, 2);
for (int i = 0; i < 50; i++) a2(3, 4);
2017/05/19(金) 12:48:21.02ID:prKcdFJm
Action<int> a = (x) => hoge[idx++] = x;
で良かったねw
2017/05/19(金) 13:01:35.38ID:cfgUfLYa
>>279
何やってるのかわかりにくい
2017/05/19(金) 13:09:48.87ID:cfgUfLYa
そんなテトリスを十行で書いたから偉いみたいな厨房コードより
一番はじめのコードで定数を意味のわかる形にするだけでええと思うで
デバッガでも追いやすいと思うし
1行にありったけ詰め込んじゃうとバグったときに追いにくいし仕様書のどこがどのコードと一致してるかもわかりにくい
2017/05/19(金) 13:14:54.18ID:prKcdFJm
言っちゃ悪いけど、この程度のコードが分かりづらいと思うなら
プログラマなんかやめた方がいいよw

>>279みたいな書き方をする目的は行数を減らすことじゃない。

>>272のコードにある重複部分を一つにまとめるとともに、2重ループで構成される
スパゲッティーな構造を平坦化して見通しを良くすること
2017/05/19(金) 13:19:11.93ID:cfgUfLYa
>>283
俺は少しでも読みにくいと思うなら誰でも読めるコードに倒す派
程度問題になるなら簡単な表現にするよ
何より仕様書に書けない
お前そのラムダ式仕様書でどうやって表現するの?
2017/05/19(金) 13:22:52.04ID:prKcdFJm
言っても無駄なタイプだと思うけど、まともなプログラマなら
>>279の方が>>272より何倍も読みやすいと感じるはずだと思うよ。

>>279が読みづらいと思うなら、それは端的に君の能力不足ですw
悪いけどね

まあ、「マジックナンバーガー」なんて本質と無関係のことを吠えてるレベルの人には
分からないかもしれん。
2017/05/19(金) 13:26:48.87ID:cfgUfLYa
>>285
それは何人のプログラマにアンケートをとったの?
設計を語る割にはあんまりレビュー慣れしてないね
お前が不勉強だから俺のコードがわからないんだって解説が会社で通っているならまあそれがお前の不幸なんだろうな
2017/05/19(金) 13:29:09.30ID:q5L+N4LV
>まともなプログラマ
ゲラゲラ
2017/05/19(金) 13:37:02.35ID:Nsgvzc4K
俺はLinq使ってるコードの方がはるかに見やすいと思う
2017/05/19(金) 13:40:46.21ID:cfgUfLYa
>>288
設計書の内容と一致できる?
2017/05/19(金) 13:42:16.23ID:wsjFAOP3
読める人が3人以上いれば使って良し
その場合、読めない奴は今後雑魚コーダーとして扱効果査定で技術力マイナス査定
俺らも遊びじゃないからね
何でもかんでも下に合わせるのはジャップランド運動会みたいで悪しき風習だ
2017/05/19(金) 13:42:58.11ID:9Xnft4qI
初心者の質問スレってわからない大先生がまた出てきたよ
2017/05/19(金) 13:43:46.41ID:Nsgvzc4K
>>289
設計書どれ?
2017/05/19(金) 13:46:06.68ID:XSlpA42c
Linq使うなとかvar使うなとかウザイ先生が定期的に湧くね
2017/05/19(金) 13:46:42.22ID:cfgUfLYa
>>292
じゃあ、設計書無いのにソースだけ見ていいって言ってるわけだ

俺らの仕事は設計書を書いた段階で95%は終ってなきゃいけないよね
いいソースってのは設計書の内容をソースに反映できていることであって
ソースの見てくれがいいことじゃないよ
2017/05/19(金) 13:47:34.14ID:04gwXQVt
何言ってんだこいつ
2017/05/19(金) 13:55:45.76ID:wsjFAOP3
設計書をコードに齟齬なく反映可能
だとすればその設計書はもはや設計書ではなくコードである
コードに置き換えるという無駄な行程を無くしてコンパイラに仕事をさせればよい

設計書をコードに齟齬なく反映不可能
だとすれば設計書至上論者の言ってることはハナから間違いとなる
反映不可能なのに反映したものが良いとはおかしな話だ
反映不可能なら書いたコードが設計書を正しく反映していると何をもって言えるのだろうか

結論
設計書至上主義者は現実が見えていないバカ
2017/05/19(金) 14:01:48.82ID:a+VoRKlA
設計書は「誰の為に」「何の為に」あるのか理解してる?
まさかプログラマの為に作られてるとでも思ってるの?
2017/05/19(金) 14:02:58.29ID:cfgUfLYa
>>296
だから設計書書きたく無いって?w
情シスはいつになっても馬鹿だなw
2017/05/19(金) 14:05:06.67ID:HtTOLHjM
>結論
ゲラゲラ
2017/05/19(金) 14:35:25.16ID:XSlpA42c
今回の命題はコードを簡単にするにはどんなやり方がありますか?
ってことなのにありもしない設計書ベースにコードを簡単にすべきではないと主張するとか完全に馬鹿だろw
2017/05/19(金) 14:37:01.65ID:cfgUfLYa
>>300
簡単?
スマート(?)だろ?
2017/05/19(金) 14:42:01.05ID:UT6RIjCf
よくわからんから具体例で議論してほしい
どういう設計書なら>>279がだめなの?
ここ初心者スレだから初心者にもわかるようにやってくれ
2017/05/19(金) 14:42:02.36ID:XSlpA42c
>>301
>>300の「簡単」を「スマート」に置換しても主旨は全然変わらないからそれでいいよ
2017/05/19(金) 14:55:55.08ID:CjiiFotr
>>300
これに尽きる
2017/05/19(金) 15:23:33.91ID:wsjFAOP3
設計書文化の頭の悪さが露呈した形になるな
2017/05/19(金) 15:32:26.04ID:cfgUfLYa
>>302
ううんそれは本質じゃないよ
設計書もないのにソースの良し悪しを判断しようとしてるのが不味い
2017/05/19(金) 15:41:42.49ID:gmSWrJbX
また底辺プログラマくんが来てスレが荒れてるねw
一生拝承システムでも作ってろ
2017/05/19(金) 16:15:41.26ID:CDMysSsn
底辺かどうか知らんけど、ラムダ式をトリッキーでも何でもない
ごく普通の使い方しただけで上から目線で「わかりにくい」とか勘弁してほしいねw

>>279はラムダ式を使ってるだけで、考え方自体は普通の構造化プログラミングの方法論通り
共通部分を括り出して分割統治しただけ。

でも構造化プログラミングの段階で躓いてる人って実際割といるよね。
前の職場にも一つのメソッドに全部のロジックを詰め込んでダラダラ書く方が
分かりやすいと思い込んでる人がいて困った
2017/05/19(金) 16:26:40.59ID:dgLRkGLJ
バカが書いた凝ったコードこそが悪夢だからね
コボラーをPGとして使わなきゃいけないなら全部フラットに書くのは実際無難な方法ではある
ウォーターフローが守られてる限りは問題なくスケールするし
2017/05/19(金) 16:34:13.39ID:4KQhVkeZ
>>308
狙ってやってるのか不具合なのかわかりにくいな
普通にif文で条件判定入れてくれると読みやすいんだけど
まあ、それは設計書になんて書いてあるかだけどね
2017/05/19(金) 16:44:34.52ID:CDMysSsn
>>310
単純に1ずつ増えるループ変数iがXを超えたかどうか(i>X)みたいなのは
条件判断なんて言わない。

I == Xになるまではiは絶対にX未満、一度Xを超えたらその後は絶対にi>Xに決まってるんだから、
普通に考えてただの無駄、それが言い過ぎなら仕方のない妥協の産物だ。

こういうコードを見て無駄でエレガントでないと感じないならプログラマ向いてないよマジで
2017/05/19(金) 16:58:16.77ID:4KQhVkeZ
>>311
ううんそれは元のコードが仕様通りだったらの話
範囲で入る値が異なるコードを書くなら明示的にif文で条件判定を書いて欲しいんだよね
だからラムダのコードの方は俺には偶然によっかかって辛うじて成り立ってるコードに見えちゃう
2017/05/19(金) 17:19:07.19ID:CDMysSsn
何のこっちゃ
要求されているのは機能的に等価でよりスマートなコード以上でも以下でもないでしょ

YAGNIじゃないけど、こんなところで無限にありうる仕様変更の可能性に対して
備えてないからダメなんてただの言い掛かりでしかない
2017/05/19(金) 17:57:50.30ID:pkYYdS/8
ちなみに272氏は単純にこう書こうとは思わんかったん?
for (int i = 0; i< 100; i++){
if (i<**) hoge[i]=1;
if (i>=** && i<**) hoge[i]=2;

if (i>**) hoge[i]=4;
}
2017/05/19(金) 18:20:26.57ID:4KQhVkeZ
>>313
違うよ
お前のコードは不具合にしか見えねーって言ってるの
2017/05/19(金) 18:27:07.86ID:CDMysSsn
>>315
具体的にどうぞ
まあ無理しなくていいよ
2017/05/19(金) 18:28:57.76ID:ZLeUzX79
linqクソ遅いやん
for文の方が何倍か速いよね確か
2017/05/19(金) 18:30:03.38ID:WWLbWYv7
100倍だぞ100倍って主張が昔あったような…
2017/05/19(金) 18:31:48.04ID:CDMysSsn
っていうかさあ、ループ変数が単純に増減するループの中で
ループ変数を定数と比較してるコードを見たら、なんだか気持ち悪いとか何か間違ってると
感じるのが普通だけど、>>312みたいに逆にそうでないとしっくりこないって感じる人間もいるんだから
世の中いろいろだね
2017/05/19(金) 18:52:01.40ID:kYbu8TAD
添字アクセスはバグの温床だからforはなるべく使わない派だわ
2017/05/19(金) 18:58:05.71ID:rvoNT6Cb
そだね
2017/05/19(金) 21:06:53.85ID:luDd5jKl
using ( var stream = new MemoryStream( hoge ) )
{
for ( int i = 0; i < 50; i++ )
{
for ( int j = 0; j < 10; j++ )
{
stream.WriteByte( 1 );
}

for ( int j = 0; j < 10; j++ )
{
stream.WriteByte( 2 );
}
}

for ( int i = 0; i < 50; i++ )
{
for ( int j = 0; j < 10; j++ )
{
stream.WriteByte( 3 );
}

for ( int j = 0; j < 10; j++ )
{
stream.WriteByte( 4 );
}
}

idx = ( int )stream.Position;
}
2017/05/19(金) 21:22:07.20ID:PUsZCclE
教えてください
ディスクトップの特定の場所の色が変わったらAを実行するというコードを書きたいのですが
どの様に書けばよいのでしょうか?
よろしくお願いします
2017/05/19(金) 21:25:59.99ID:V49AdHLO
>>323
それは画面キャプチャが必要でそれだけでも一筋縄じゃできないような
タイマで監視するにしてもコスト大きすぎるし
他の条件は無いのか?
2017/05/19(金) 21:33:43.42ID:PUsZCclE
>>324
ありがとうございます

アプリから通知が来た時に右下に通知の吹出が出るので
その時にAというプログラムを実行したいと考えているのですが難しそうですね
2017/05/19(金) 21:39:37.11ID:wsjFAOP3
通知にフックすればいいじゃん
2017/05/19(金) 21:48:19.14ID:MbXyDkjN
>>323
ディスクトップwww
2017/05/19(金) 22:02:05.77ID:9om5PS5P
>>271
設定とかを書いてる訳じゃないよ
詳しくは書けないけど要するに WritePrivateProfileString なんて使うのがバカって言う結論
装置制御用のPCだからUPSはもちろんハングアップしたら外部のハードウェアで電源Off/Onまでやるようになってる
2017/05/19(金) 23:45:52.56ID:HvrNab0E
>>320
じゃあforeachで
2017/05/19(金) 23:47:34.46ID:HvrNab0E
>>323
指定した座標のカラーを取れば良い
2017/05/19(金) 23:53:05.65ID:luDd5jKl
通知ウィンドウ(?)をSpy++とかで調べておいて、そのウィンドウが出てるかポーリングするとか。
2017/05/20(土) 01:29:25.58ID:HfZ9LPLj
>>325
色はダメ

別のアプリの通知がでて同じ色の吹き出しが出たらどう区別すんの?
2017/05/20(土) 10:07:05.79ID:TjL8/DAP
うんこマーク付けとけうんこマーク
2017/05/20(土) 16:56:47.34ID:LUvMfIz7
>>272の質問の人何も言わずにとんずらしちゃったけど、
ひょっとしてラムダ式が分かりづらいって文句言ってたのが質問者本人だったのかなw
2017/05/20(土) 17:17:57.91ID:s6GG1k5+
>>306
まさにお前が言うな
2017/05/20(土) 17:42:51.92ID:Lw3rlvDI
C#スレこんな低レベルだったっけ
2017/05/20(土) 17:51:55.39ID:H5zsVvWC
初心者だからみんな低レベルだよ
2017/05/20(土) 17:58:30.08ID:TjL8/DAP
>>334
初心者にもわかりやすいコードがいいね
2017/05/20(土) 18:07:46.65ID:okSFnVvW
>>334
コードをスマートに書き換えて、ってそもそも質問じゃないじゃん
ネタ振ってスレの様子見て遊んでいる人が混ざっているのだからいつまでも構わないでくれ
2017/05/20(土) 18:36:04.13ID:TjL8/DAP
まあ、初心者に的確な判断を要求するのも酷だな
341323
垢版 |
2017/05/20(土) 18:52:37.15ID:eWsnLc5H
>>327
し、初心者なので許してくださいww

>>330
なるほど〜その線でしらべてみます
…って思ったけどさっぱりわかりませんorz何処か誘導お願いします

>>332
大丈夫です。
ほかのアプリは黄色い色の通知はしないのでいけると思います
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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