ふらっと C#,C♯,C#(初心者用) Part148
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part147
http://mevius.5ch.net/test/read.cgi/tech/1582100741/
■関連スレ
C#, C♯, C#相談室 Part94
http://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured >>312
そのプロパティ?はまだ本内で教わってないですが使ったら表示されました。
ありがとうございます!! >>310
CUIなRTOSなんて普通にあるけどなぁ .NET Coreでコンソール画面に
「こんにちは、WORLD!」と表示させようとすると
なぜか「こんにちは、WORL!」のように表示されます
コンソール画面のメニューからフォントを変更すると正しく表示されますが原因が分かりません static void Main(string[] args)
{
var str = "こんにちは、WORLD!";
Console.WriteLine("{0}", str);
Console.ReadKey();
} >>327 >> 328
試してみましたが改善しません
出力をコピーしてメモ帳にペーストしてみると正常なので
どうも文字化けではないようです
文字の表示位置がずれて重なっているような感じです >>329
こちらでは正常なんでコンソール画面のプロパティの設定がおかしいんでは? MSゴシックの18ポイント、Windows8.1です
来週会社のパソコンで試してみることにします >>332
8.1はプロパティでレガシーコンソールのチェックある?あったらそれチェックでいけるんでは? 何にもアドバイスできないのに恐縮だけど、
>コンソール画面のメニューからフォントを変更すると正しく表示されますが
だったら具体的にどのフォントで問題が発生してどのフォントで発生しないか
確認した範囲で書いた方がいいのでは
あと、普通テキスト変えていろいろ試さないか? 他のアプリでMSゴシックの18ポイント使ってみ。フォントのファイルが正常かどうか
使えるなら8.1のコンソールウィンドウの問題でしょ >>320
Typeで事足りそうなものだが…
あるいは設計の問題かも。
どんな設計なのかも書き込んでみたら? ローカルでiTextSharpを利用して、
Json形式のデータからPDF帳票を作る・・てのつくったんだが、
(サーバ上で、APIコールとかファイル読込でPDFファイルを返したかった。
イメージ的にはページごとにTextとかLineを指定したJsonデータ)
いざ業務に転用できるかなってフェーズにきて
iTextSharpのライセンス(AGPL)がやだなあ、って思ってる。
PDFSharpは日本語がなんかうまくいかない。
今のC#で、PDFを作るの、皆さんはどうやってる? >>338
業務だったらExcelCreator使ってる React、Vueで帳票レンダリング
ヘッドレスブラウザでPDF印刷 PDFSharpは日本語の折り返しに対応してなかったぞ。 >Json形式のデータからPDF帳票を作る
これが折り返しするかどうかだな 皆さんありがとうございました・・・
方針としてはPDFSharpをもっかいいじくり倒して、他にもいろいろ試してみます・・・
プレプリント紙への印刷やめたい
>>339
そんなソフトあるんですね!サーバ版たけぇ・・
>>341
クライアントサイドのレンダリングはちょっときついです、環境バラバラなんで
>>342
自分にはグラフィックをちょうどよくテンプレにはめる設計力がなさげ
>>344
折り返しするんですよね。。
まあそれ以前使うフォントが特殊でつまずいたっていうのがありましたが >>345
クライアントサイドじゃないよ
サーバーでヘッドレスブラウザ使ってPDF出力してレスポンス返すだけ >>345
Excelで帳票のテンプレート作ってそれをPDFにできるんでめっちゃ楽
みんな慣れてるでしょExcel帳票w >>346
そうなんですね!ちょっと見てみます
>>347
Excel帳票大好きです(大嫌いです) C♯が現在最強言語らしいので勉強したいのですが
マイクロソフトはVB6の開発を打ち切ってプログラマを裏切った過去があるそうで
なかなか踏み切れずにいます。。。
C♯は20年後も開発が続いてると思いますか?
教えてエロい人 そんな先のことなんざわからん
確実に言えるのは今勉強している技術を20年後も変わらずに使い続ける前提でいるような技術者は居ない(と信じたい)
生き残ってるなら初期学習がない分少し楽かもしれないけど、新しいのが台頭してくりゃそちらを新たに学習するだけ そうですか。先のことは誰にもわからないですよね。
逆に20年後も確実に主力な言語ってPythonくらいかな? >>349
開発が続いてる言語の新しい技術についていくような人はどんな言語でもすぐ学べる >>352
新しい技術について行く用意はあるんですが
言語の基本的な記述などのルールが変わるのが面倒なんですよね。。。 C#ほど後方互換性を重要視している言語ってなかなかないと思うけどね >>354
そうなんですか。ではC♯を勉強すれば基本記述まで変更なんて
事はしばらくはなさそう?ですね。。。
勉強してみます!! >>353
勉強が1ヶ月続くかどうかも怪しい奴が20年後の心配をするのは馬鹿げているぞ。
そんなことじゃ、何かを勉強し始めたとしてもことあるごとに足踏みして前進できない未来しか見えない。 そだね
python使えるようにするみたいな話はあったけど進行してるのかな? >python使えるようにするみたいな話
頓挫したぞ 贅沢言わないから.NETにpython入れてVisualStudio(codeじゃない方)でサポートしてくれるだけでいいのに >>357
まだExcelのWeb版だけみたいだけどJavaScript/TypeScriptが使える
マクロじゃなくアドインならC#やF#みたいなCLR言語ならなんでも可だったかと ChromeベースのWebView2がやっとラウンチしたようだね。まだ.netじゃ使えないが
Previewで確認したところマウスの戻るボタンが使えるのがいい所だな >>361
IronPythonって2.7っしょ
使えないな。。。 なんかうろ覚えなんだが
こういう非同期処理の書き方ってちゃんと動いたっけ?
if(!locked){
locked = true;
await xxx.Task;
locked = false;
}
async/awaitは同じスレッドに戻るからこんな単純なロックでも問題無いって昔判断したような記憶はある ソースの一行単位でスキがうまれるので無理じゃね
ifとlocked=trueの間に実行されてる 1行単位どころじゃなかった
意味不明なところでも割り込みあるわw 四捨五入の結果がおかしいのって自分だけかな・・・
decimal v = -0.0195m;
decimal rounded = Math.Round(v, 2, MidpointRounding.ToPositiveInfinity);
Console.WriteLine(rounded);
ってすると、小数点2桁までになるよう(小数点3桁目を)四捨五入するので
-0.02になるはずなのに、結果が-0.01になっちゃうんですけど・・・ >>366-368
awaitで同期取ってるから問題ない
>>369
To Positive Infinityだから正数寄りになる
ゼロを基準にしたければMidpointRounding.AwayFromZeroを指定する
await(待つ)もそうだが、変な日本語のリファレンスよりも明快な解説が変数名に詰まってるんだからお前らはまずその単語をGoogle翻訳に掛けるべきだと思うわ >>371
いや
if(!locked){
実行
別タスクlockedのfalseを見て処理開始
locked = true;
別タスク割り込まれたら困る処理開始
await xxx.Task;←別タスクと衝突
locked = false;
}
起こるじゃん >>371
-0.01と-0.02の中間(MidPoint)である-0.015のときの丸め方(Rounding)として
「MidpointRounding.ToPositiveInfinity」を指定したつもりだったのですが・・・
MidPointじゃないときにも「ToPositiveInfinity」が適用されちゃうんですね・・・
JavaScriptのMath.Round()とおなじような(四捨五入される桁の数字が5の場合に
正の無限大の方向で丸める)四捨五入をしたかっただけなのですが、
関数を自作しないとだめみたいなので自作します。
お騒がせしました。 四捨五入:わかる
銀行丸め:わかる
正の無限大の方向で丸める:何の意味があんのそれ? >>373
それならこんな感じで簡単に作れるから頑張れ
static decimal[] table = new decimal[]{1E0m, 1E1m, 1E2m, 1E3m, 1E4m};
static decimal Round(decimal num, int pow) => Decimal.Floor((num * table[pow]) + 0.5m) / table[pow];
decimal num = Round(-0.015m, 2); // -0.01
>>372
普通にメインスレッドから叩いていればこうなるからな
if(!locked){ // thread 1
locked = true; // thread 1
await xxx.Task; // thread 2
locked = false; // thread 1
} 正負どっち方向に動くかわかんない変換より確実に方向がわかっている変換が必要なことはあるよ -2.4 → -2
-2.5 → -2
-2.6 → -3
こういう丸めが意味を持つケースが一般的とは思えない
>>376
知らないのは君だと思うよ 5捨6入って特定に分野では一般的な計算方法では?
俺は使わないけど >>377
それが問題になるのは、そのifブロックが複数スレッドで実行されたときだからな >>377
はじめのlockedをみてるガードは別スレッドからのアクセスに対して無力だよ
そこはおk?
>>377の番号で言ったらThread3以上のスレッドからの話ね >>385
つまりこういうのを危惧してるのか?
Task.Run(() => {
if(!locked){
locked = true;
await xxx.Task;
locked = false;
}
});
だとしたらこんなのは仮定に持ち出すのがそもそも間違い
それ言い出したらフィールド操作するあらゆるメソッドで「並列で呼び出される可能性がある」とlock()で括らなきゃいけなくなってしまう ifブロックがシングルスレッドでしか実行されない状況で
lockが必要な状況ってどういうの? 元の質問がマルチスレッドでのロックに関する質問だと思うのだがな
このコードはスレッドセーフですか?
いいえ危険です
みんなが回答してるのはそういう事
このスレの趣旨や質問者のレベルを考えると妥当な仮定と回答だと思うぞ 元の質問って>>366だろ?
> async/awaitは同じスレッドに戻るからこんな単純なロックでも問題無い
「同じスレッドに戻る」を認識してるなら疑いなくtrueやん
ここで「でも別スレッドで動かしたら危険」と言うのは質問の前提を崩してる そのawaitしてるのはasyncメソッドだから、メインスレッドからのみ呼ばれるとは限らん
つまりもどるのがメインスレッドだとは限らん
というの理解しているのならまあ大きなお世話だと言えなくもないが
あとフォームアプリじゃなければ、もとのスレッドに戻るも保障されないけどな >>389
なるほど
ロックって言葉でちょっと意図を勘違いしてた
タスクが実行中ならもう1回呼ばれても実行しないようにしたいってことだったのか
タスクの中には他のスレッドと競合する処理はなく
ifブロックはUIスレッドでのみ実行されるという前提ならいいんじゃねって気がする >>392
何か必死で調べたくさいこと言ってるが
asyncだから、って下りに無知が現れてるな >>366 の質問自体は「問題ない」が回答だけど、
そもそも質問の前提に危うさがあるんじゃない?
って感じではダメなんだろうか。 >>338
まだ帳票開発したことないけど、やる機会があればDocurainってサービス使ってみようかなって思ってる for文で書き始めて、配列から要素を取り出すだけだからforeachに書き換えて、でもやっぱりiが必要になってfor文に戻すこと多くない? MoreLinqのIndex()がKeyValuePair<int, TSource>を返してくれる
簡単だから自分で実装してもいいけどライブラリ使うほうが管理含めて楽
foreach (var (i, x) in foo.Index()) {
Console.WriteLine($"{i}: {x}");
} >>400
いや、これ書くぐらいならforで書くよな (index, value)と(value, index)でバグを作ってしまったから
Index拡張メソッドは控えることにした >>405
それあるわ
他人のプログラムが前者で、自分は後者派だったからお互いえ?え?となったわ そもそもforeachなんて作ったやつの脳みそ腐ってんだから仕方ない
何回回すのかもコードからわかんねーし
どう回したいのか変わると一気に産廃
そもそもforeachなんて産廃コード使うなよ
変更に激弱だろ
あ、インデックスN番目は処理したくない
→産廃
あ、後から処理しないと
→産廃
あ、奇数と偶数で処理変えないと
→産廃
あ、こっちの配列もみながらいっしょに処理しないと
→産廃
もうあれね
コードレビューでforeachを見つけたら
修正させるぐらいでいい インデックスを考えるような用途でforeach使うほうが悪いだろ。
偶数と奇数で処理変えるのも意味わからんし、イテーレタを一つずつって変更に強いと思うけど。
全部Linqでなんとかなることだけどさ。 偶数の場合こう処理します!
プログラム解説サイトとかでありがち。
実務でそういうのに出くわしたことほぼない。 >>410
あるよ
datagridviewとか見にくいから偶数と奇数で色変えてくれってありがちじゃん 2行でワンセットになるデータで
上側だけ、下側だけって処理するときもお世話になるじゃん
どんだけ組んだことないんだよ WPFみたいな割と最近のライブラリなら、
自前で偶数判断なんてせず交互に色を変えてくれる。 >>411
それはデータ行に対してやることじゃない。
行に対して表示非表示の制御加えるだけで破綻する。
表示中の画面の描画関数でやることであって、行をイテレートしてやることじゃない。
>>412
2行1セットなら、そのクラスを作って、1インスタンスごとに制御するのが王道でしょ。
どんだけ空想上の「組んだこと」で話してんの?それともボンクラなの? >>414
え?いやでも必要じゃん
そんときforeach使わないよね >>415
必要じゃないし、パース時点ではパーサ使うし、中では極力foreach使うよ。
2行で1アイテムが3行で1アイテムになったときにModulo全部変えてくの?
頭悪すぎるコーディングでしょ。 >>416
は?
いや客は単に奇数と偶数行で色変えてくれって言ってるだけやで >>417
画面側でやること。
描画関数には何行目かそもそも渡ってくるからループなんぞする必要もないだろ。
それを客が言ってるからってデータでやるのは手早くて汚い方法取ってるか、それしか知らないって事じゃん? >>418
うーん、確かにdatagridviewで偶数と奇数だとそれだけだなw
俺が悪かった ループで奇数と偶数は別の描画ライブラリ使っててそっちの話だった
すまん ■ このスレッドは過去ログ倉庫に格納されています