ふらっと C#,C♯,C#(初心者用) Part146

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 9f0b-Fgt1)
垢版 |
2019/12/11(水) 22:12:11.28ID:d09CciDz0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part145
https://mevius.5ch.net/test/read.cgi/tech/1570446977/
■関連スレ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/
■コードを貼る場合は↓を使いましょう。
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
2020/01/06(月) 22:51:30.20ID:z7GoHnb80
>>298
さすがにやったことないな
ググッたら前例はあった
https://www.c-sharpcorner.com/article/creating-your-own-web-server-using-C-Sharp/
2020/01/06(月) 22:54:19.72ID:codN4GMx0
>>298
Kestrelじゃなくて?
2020/01/06(月) 23:07:18.60ID:D2EGtjEk0
任意に呼び出せる100個程度の文字列定数を作りたい時って地道に宣言するしかないよね?
enumは使えないしDictionaryはヌルポこわいし

>>298
IISとかではなくて?
302デフォルトの名無しさん (ワッチョイ 7197-IH4P)
垢版 |
2020/01/06(月) 23:14:02.24ID:v3NiRowX0
>>301
地道に宣言するにしても、Dictionaryに地道に値を入れていく以外に簡単に生成できる方法がある
(テキストから読み込むとか、keyとvalueが同一でよい)のなら、一旦Dictionaryを作って
そこからC#のコードを文字列処理で生成してソースコードにコピペとかすると楽だよ。
C#コードの生成はもちろんC#以外の言語でもなんでもいいから慣れてる言語でやればいいし。
2020/01/06(月) 23:14:03.88ID:YSZbxSNB0
>>301
日本語の意味が取れないからどういうのを想定してるか具体例を書いてくれ
2020/01/06(月) 23:22:52.50ID:78RinjQr0
constでコンパイル時に解決したいというのでなければリソースファイルを使う
2020/01/06(月) 23:58:53.91ID:jMeFAWx00
どうせ戻り値は、4バイト整数だろ

signed int, -2,147,483,648 〜 2,147,483,647
unsigned int, 0 〜 4,294,967,295

システムが、0 〜 1,073,741,823
カスタムが、1,073,741,824 〜 2,147,483,647
の範囲を使うとして、

ひとまずカスタムは、1,073,742,000 〜 1,610,612,000 の範囲を使っておけばよい
2020/01/07(火) 00:06:26.34ID:W22n+t+k0
処理系が正確に何指してるか不明ではあるが.NETのバージョンとかコンパイラのバージョンだったとして…
それ更新したら普通バージョン上げないの?
ソースコード変わってないからビルド番号しか上げない、みたいな運用聞いたこと無いけど…
乗っかってる大元を変えるって結構大きな変更だからコードの変更が一切不要でも念の為リビジョンなりバージョンなり上げない?
2020/01/07(火) 08:52:49.60ID:xOWyMMFH0
htmlファイルをディスク上に作らずに、こちらのプログラム上で仮想生成したhtmlをWindows規定のブラウザで開かせる方法ってないでしょうか?
ウインドウメッセージなどでデータを送りつける等の方法があれば良いのですが
2020/01/07(火) 09:00:28.70ID:JXhmELVL0
詐欺請求マルウェアかよw
2020/01/07(火) 10:01:00.59ID:xOWyMMFH0
すみません、解決しました
ブラウザの対応次第なものの一般的なブラウザであればdata Urlで簡単に実現できました
310デフォルトの名無しさん (アウウィフ FFa5-p4uH)
垢版 |
2020/01/07(火) 16:12:15.29ID:2Dq0zKSWF
おまいら printf の戻り値はちゃんと毎回確認するんだぞ判ったか
311デフォルトの名無しさん (ワッチョイ 9901-8/Ff)
垢版 |
2020/01/07(火) 17:16:35.91ID:PuPIfAOU0
お断りします。
2020/01/07(火) 17:27:42.26ID:Tv0SPXaP0
Excelによる計算をマスターとした場合、
C#で浮動小数点の誤差まで再現するには、どうしたら良いのでしょうか?
floatやdoubleやdecimalをそのまま使うだけでは、完全一致はしないですよね?
2020/01/07(火) 17:39:13.63ID:wDqVPTN90
>>312
decimalは誤差がないが…
とりあえずそれはExcelの計算方法の再現であってC#の話題とは別
2020/01/07(火) 17:51:56.04ID:zRb5T0D/r
そもそものそのエクセルの計算が税法上問題なかったり物理学上の誤差などを
しっかり配慮された計算なのか?とう疑問がある
2020/01/07(火) 18:25:35.96ID:Tv0SPXaP0
>>313
はい、Excelの計算誤差も含めてC#で再現したいのです
Excel固有の関数の再現では無く、除算乗算程度です

>>314
Excelは簡単な計算でも誤差が出る時があるのは理解していますが、それでもExceによる計算結果lを「神様」として完全一致させるのが理想です
https://docs.microsoft.com/ja-jp/office/troubleshoot/excel/floating-point-arithmetic-inaccurate-result
https://answers.microsoft.com/ja-jp/office/forum/office_2013_release-excel/excel%E3%81%AE%E5%8D%98%E7%B4%94%E3%81%AA%E8%A8%88/e5421c34-8053-4132-a0a6-14729e505376
2020/01/07(火) 18:30:52.77ID:RhWBTAz60
内部でexcel操作するライブラリを使って実際にexcelに計算させてその結果をもらう
って方式じゃだめかな?
何にせよ絶対関わりたくない要求仕様だなw
2020/01/07(火) 18:36:18.00ID:sMehhi+20
>>312
仕様を理解してエミュレートする
https://docs.microsoft.com/en-us/office/troubleshoot/excel/floating-point-arithmetic-inaccurate-result
https://en.wikipedia.org/wiki/Numeric_precision_in_Microsoft_Excel

無駄な努力
2020/01/07(火) 18:59:31.78ID:Tv0SPXaP0
>>316
ExcelライブラリやEEPlusが使えれば良かったのですが、今回はライセンスの関係もあってExcelが無いPCで動作させる必要があるので、Excelを裏で動かす様なことは出来ないのです。

>>317
15桁処理なので、やるとしたら計算毎に桁数をカウントするとかになりそうですかね・・・。
C#で普通に計算した方が精度も出るので、すっごく無駄なことをやることになりますね。
2020/01/07(火) 19:04:39.58ID:EurMb9rX0
一体どんなアホが集まればそんなふざけた案件が出来上がるんだ…
2020/01/07(火) 19:18:53.11ID:OMl1FHHvd
>>318
EPPlusやClosedXMLなら、Excelがマシンにインストールされている必要はないやろ
321デフォルトの名無しさん (アウアウウー Saa5-pIXJ)
垢版 |
2020/01/07(火) 20:18:05.17ID:cpbbTuYka
これはC#じゃなくて、CやC++に言えることかもしれませんが、
List<int> test=new List<int>();
for(int i=0; i<100000000; i++)
test.Add(123456789);
このような膨大な要素のリストを作った場合でも、
プログラムが動くのは、変数はメモリではなくHDD領域に格納されているからでしょうか?
メモリに全て格納すれば、メモリ不足でプログラムは動きませんよね?
322デフォルトの名無しさん (アウアウウー Saa5-CnQr)
垢版 |
2020/01/07(火) 20:25:58.17ID:IHn/p+8Ca
>>315
8086の時代じゃあるまいし、30年前だって実数計算なんかHW処理だよw
つまり、CPUさえ同一なら(変なことをやってないかぎり)VBだろうがExcelだろうがC#だろうが計算結果は同じになるはず。

現に>>315の計算C#でやっても同じ答えが出るよ
2020/01/07(火) 20:26:35.52ID:YKIaA9us0
>>321
仮想メモリでググってみな
2020/01/07(火) 20:27:46.08ID:+2sDQ8Ye0
今どき400MBぐらい物理メモリにのっけてもそこまでって感じだけど
仮想メモリで調べよう
2020/01/07(火) 20:28:50.54ID:23MsATD60
>>321
10000000/1024/1024=95.36
95.36*4=381MB
まぁ今のPCスペックじゃ余裕じゃね。

ある時、テンプレートで消費されるメモリの方が格納データより多くなる
どこに限界があるか自分で計ってみなされ
2020/01/07(火) 20:33:16.30ID:YKIaA9us0
>>322
C++でアプリ作ったときは浮動小数点制御ワードの設定次第で、演算の精度や丸め方向が変わって演算結果に差異が出たけど、C#やexcelではどうなんだろう? 同じ条件で決めうちなのかな?
327デフォルトの名無しさん (ワッチョイ 5f9b-Eg5K)
垢版 |
2020/01/08(水) 16:03:59.03ID:Sre2vN3k0
google spreadsheet とか ms office online とか 360 でも再現されるのかな
2020/01/10(金) 02:04:40.36ID:aPGnNlsf0
非同期メソッド(async/await)の必要性について教えてください。

Task.RunやTask.Factory.StartNewメソッドを使えば、タスクを別スレッドで生成・実行できると思います。
またこれらのメソッドによる戻り値を呼び出し側で使いたければ、Task<TResult>クラスのResultプロパティを利用してやればよいと思います。

となると、上記のメソッドと比べ、非同期メソッド(async/await)の必要性や有用性って何なんでしょうか?
329デフォルトの名無しさん (アウアウウー Saa3-7oRq)
垢版 |
2020/01/10(金) 03:15:36.39ID:doMNh/YUa
>>328
この記事読めば最初の10分でわかるよ
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/app/masterasync_index.html
分からなかったらここで人に聞いてもたぶん納得するような解答は得られないと思う
その場合は諦めて下さいw
2020/01/10(金) 07:14:44.82ID:1LguP2Z50
読めば読むほどDoEvents大勝利の予感!
2020/01/10(金) 17:27:42.50ID:D+gtbuRW0
弊社は庶務おばちゃんのPCですら64bitでメモリ8GB
2020/01/10(金) 17:40:13.71ID:g1glT3r10
>>331
どこから誤爆したのか知らんが10年前の話でもしてたのか?
333デフォルトの名無しさん (ワッチョイ df2d-guBg)
垢版 |
2020/01/10(金) 21:01:49.43ID:kvQnOJve0
本当はここの話題じゃないのかも知れないけどさあ
.NetCoreアプリ(〜.dllファイル)に対するAppArmorの設定ってどうやるのか解説してるサイトや書籍があったら教えてくれんかな?
dotnetコマンドに対する制約しかかけられないのかな・・・・
2020/01/10(金) 21:14:00.77ID:PkgwRlbI0
>>328
async/await で書くと、深いネストのコールバック地獄を避けられるw
2020/01/10(金) 21:38:12.63ID:pVxCiE3h0
>>334
むしろasync/await地獄の始まりなんじゃ
336デフォルトの名無しさん (ワッチョイ df35-e1y7)
垢版 |
2020/01/10(金) 21:46:24.01ID:nE2xZxkX0
>>335
kwsk
2020/01/10(金) 21:48:34.84ID:aX6A99t20
>>335
KWSK
2020/01/10(金) 23:13:19.94ID:zSF+N+820
>>328
ブロッキングすんなよ…
2020/01/10(金) 23:16:57.47ID:c4Cc7glv0
コールバック地獄のネストがasync/awaitで解消されるわけじゃないんだがな。
340デフォルトの名無しさん (ワッチョイ df35-e1y7)
垢版 |
2020/01/10(金) 23:25:42.90ID:nE2xZxkX0
>>339
なんで?
2020/01/10(金) 23:40:56.46ID:c4Cc7glv0
コールバック引数に関数リテラルを書いてるからネストが深くなるわけで、それが嫌なら
関数を切り出しておけばいい。
async/awaitを使う場合は最初からそうするしかないってだけ。
342デフォルトの名無しさん (ワッチョイ df35-sGtB)
垢版 |
2020/01/10(金) 23:45:01.53ID:nE2xZxkX0
まあ逐一処理みたいに並べて書けるから便利だよね。
別の場所に用意したコールバック関数の中に次の処理書くよりマシかな
2020/01/10(金) 23:48:54.52ID:c4Cc7glv0
あれ、ここc#スレじゃんw
344デフォルトの名無しさん (ワッチョイ df35-sGtB)
垢版 |
2020/01/10(金) 23:51:08.53ID:nE2xZxkX0
いや、こうか。
そうしないとコールバックで繋いでないな。
f1(x1,y1,
 f2(x2,y2,
  f3(x3,y3,
   f4(x4,y3)
  )
 )
)
2020/01/11(土) 00:43:53.19ID:HNDaLABiM
目次見る限りasync/awaitまで書いてあるようだが内容古いかな?

C#による マルチコアのための非同期/並列処理プログラミング
http://gihyo.jp/book/2013/978-4-7741-5828-0
2020/01/11(土) 10:39:28.88ID:LYbiGn3M0
C#で明示的にメモリを開放する手段はGC.Collect以外にはないんでしょうか?
画像やオーディオファイルを扱うアプリを作っている最中ですが、数百MBのデータを扱い終えても数分はメモリ使用量がそのままで少し気持ち悪いです
GC.Collectを行うと副作用も色々とあるようなので他に手段があればと
2020/01/11(土) 10:49:45.29ID:W2txbHVT0
>>344
その場合どれがコールバック?

c#ならラムダを使えばjsのコールバック地獄と同じような地獄を味わえるが、async/awaitは関係ないな。
2020/01/11(土) 11:09:15.66ID:UtksiWPF0
async/awaitの件解決しました。
ありがとうございました!
2020/01/11(土) 11:28:43.37ID:TUd4PMk40
DoEvents最強!
350デフォルトの名無しさん (ワッチョイ df35-e1y7)
垢版 |
2020/01/11(土) 11:44:58.26ID:tdQ2h9sk0
>>347
普通にミスった
関数ポインタ的なものを渡してるつもりだったけど実行演算子付けてたら意味ないな

f1(x1,y1,(y1,y2)=>
 f2(x2,y2,(x3,y3)=>
  f3(x3,y3,(x4,y4)=>
   f4(x4,y4)
  )
 )
)

多分こうかな
やっぱりこのほうがいいな
そもそもこんなに非同期処理並べるときあるか分からないけど
await f1(x1,y1)
await f2(x2,y2)
await f3(x3,y3)
f4(x4,y4)
2020/01/11(土) 11:58:16.27ID:W2txbHVT0
それ、非同期ラムダならawaitで待つけど普通のラムダなら普通に呼ぶだけだろう。
awaitで解消できるわけじゃなくて。
352デフォルトの名無しさん (ワッチョイ df35-e1y7)
垢版 |
2020/01/11(土) 12:03:26.24ID:tdQ2h9sk0
こうか
f1(x1,y1,async (y1,y2)=>
 await f2(x2,y2,async (x3,y3)=>
  await f3(x3,y3,async (x4,y4)=>
   f4(x4,y4)
  )
 )
)
353デフォルトの名無しさん (ワッチョイ df35-e1y7)
垢版 |
2020/01/11(土) 12:04:51.20ID:tdQ2h9sk0
いや、これだとasync, await使ってるから本末転倒やな
もう時間ない
2020/01/11(土) 12:28:03.20ID:yg8EbsDw0
>>346
> GC.Collectを行うと副作用も色々とある
あくまで一般的な方針ってだけなので別に自分のアプリで問題(望ましくない時にスパイクを起こすとか)無ければ好きに呼べば良いよ
別にイリーガルなAPIというわけでもない
まあ一般的な話で言えば「メモリ残っててなんか気持ち悪い」程度の理由で呼ぶ必要はまったくないが
355デフォルトの名無しさん (ラクッペ MMf3-elwi)
垢版 |
2020/01/11(土) 12:48:55.66ID:iMRI2zWpM
>>350のコールバックが非同期で呼び出されるってことだろうから普通に並べて呼ぶだけじゃ無理じゃね
2020/01/12(日) 10:53:37.47ID:dSru1J0h0
>>354
たしかに基本的には問題になりませんが、
数GBを消費することもあり、もしそのときに使用者が他に重いプログラムを起動するなどするとメモリ不足になる場合もあるかなと・・・
こういうプログラムはGC任せにするのではなくC++などで作るべきという結論になるんでしょうか?
2020/01/12(日) 11:39:38.30ID:hca/fTZV0
>>356
仮想メモリでググってみて
2020/01/12(日) 12:06:08.27ID:EKUpo6h10
>>346
IDisposableなオブジェクトがあれば不要になった時点できちんとDispose()するようにするとかかな。
画像を扱っているんであればSystem.Drawing.Imageとかいろいろあるんでは。
2020/01/12(日) 12:10:08.97ID:VFqe+WSm0
usingで囲むのが定石かな?
2020/01/12(日) 12:28:05.83ID:dSru1J0h0
主にはMemoryStreamで巨大データを扱っていてちゃんとDisposeは行っていますが、タスクマネージャーで監視している限りだと中々メモリ使用量が減りません
2020/01/12(日) 12:32:04.56ID:21O0ncu50
>>356
その消費されているメモリがどのメモリなのかきちんと把握しないと意味がないよ

マネージドメモリが消費されればそれだけ手動でCollectせずともGCは働くはず
なのに残っているとしたらstatic変数等で無駄に参照し続けている可能性がある

アンマネージドなメモリなら既に書かれてる通りDisposeを必要な場面で呼び出していない可能性がある
加えてGC性能の観点からはDispose(正確にはファイナライザの方だけど)をGC任せにするのは
程度問題ではあるけど基本的にはご法度

現状「メモリが大量に消費されているが手動でCollectして大丈夫か」の情報だけでは現状方針は立てようがない
2020/01/12(日) 12:37:20.88ID:dSru1J0h0
>>361
一応上でも書きましたがメモリリークの相談ではありません
2020/01/12(日) 12:52:17.43ID:21O0ncu50
>>362
タスクマネージャ眺めてるだけじゃ開発者が手続きを間違えいてるのか
.NETのGCがクソなのかも判断できないという話だよ

CLRProfilerなり使ってもうちょっと詳細詰めてみたら?
2020/01/12(日) 13:07:52.95ID:dSru1J0h0
>>363
言葉足らずでしたが、Dispose処理を行ったであろうタイミングで減らないというだけであって待つなりそこでCG.Collectを行えばちゃんと解放はされます
ただ上でも言ったようにGC.Collectは副作用があるようなのでC++のdeleteのようなものは無いのかなと
2020/01/12(日) 13:49:29.53ID:GXqrVy4G0
GCって動かしてやらないと限界まで解放しないよ
限界までいって開放時のその時起きるのはストップザ・ワールドと呼ばれる有名な現象

その前にもメモリの残量を見てるアプリが動かなくなる
あ、メモリ少ないじゃん俺起動やめんべ
こういうのも絡んで再現不能な不具合を多々撒き散らす
常駐アプリならストップザ・ワールドが困るなら定期的に解放せんとまずい

ちなみにストップザ・ワールドは10分は動かなかったときがある
2020/01/12(日) 13:50:45.08ID:21O0ncu50
>>364
まあ生存しているマネージドメモリの正体がわかり切っていて処理の途中でも無いなら
(例えば単純にユーザー操作からファイルの読み込みが完了して結果が表示された後とか)
それはCollect使っても構わない場面だと思うよ

結局副作用と言ってもヒューリスティックなGCの調整に影響が出て
細かくGCが起きる場面でのスループットが低下する、かもしれない
とかその程度だしね
2020/01/12(日) 13:53:55.26ID:F6k+/xNLM
サーバーじゃなくてクライアントアプリだろ?
ガンガンGC.Collect打っても全然問題ないよ
2020/01/12(日) 13:54:13.68ID:yOfvFL1A0
>>365
なるべくストップザ・ワールドしないようにGCは改良されてきたけど、
.NET Framework 4.8でも10分かかったりする?
2020/01/12(日) 14:00:58.90ID:GXqrVy4G0
>>368
俺がやったのは4.5ぐらい
でもこの辺の挙動って変わるかな?
2020/01/12(日) 14:21:33.28ID:EstEf4vMM
>>364
大きなメモリブロックを頻繁に扱うならアンマネージドメモリを使いなよ
アンマネージドメモリなら開放したいときに無駄なく開放できる
今はspanがあるからアンマネージドメモリの扱いも簡単だ
GCの手動実行は開放したいメモリ以外にもマークアンドスイープが発生しちゃうから効率が悪い
ちなみにMemoryStream.Disposeはインターフェース共通化のために実装してあるだけで呼び出す意味はない
2020/01/12(日) 14:32:31.87ID:fMqCO5na0
逆に10分止めちゃうようなコードを見てみたい
2020/01/12(日) 14:39:35.43ID:OVUZbrRA0
GCが分単位でかかる状況ってそもそも作り出せるもの?
373デフォルトの名無しさん (アウアウウー Saa3-7oRq)
垢版 |
2020/01/12(日) 14:49:38.22ID:KwEpglzAa
ストップザワールドてw
PC-98の時代で頭が止まってるのかwww
2020/01/12(日) 16:50:21.94ID:M8sF3s6B0
時間経過だけを条件にフルGCがされることってあるのかな?
メモリリークではないと言ってるけど状況的にそう言える根拠はないような・・・
- 数GBが開放されない
- 数分待てば開放される(ように見える)
- GC.Collectすれば開放される
- タスクマネージャーでのみ確認
2020/01/12(日) 17:07:03.57ID:M6sT7X550
MSDNより

ガベージ コレクションの条件
ガベージ コレクションは、次のいずれかの条件に当てはまる場合に発生します。
・システムの物理メモリが少ない場合。 OS からのメモリ不足通知またはホストによって示されたメモリ不足のいずれかによって検出されます。
・マネージド ヒープで割り当てられたオブジェクトによって使用されているメモリが、許容されるしきい値を超える場合。 このしきい値は、プロセスの進行に合わせて絶えず調整されます。
・GC.Collect メソッドが呼び出された場合。 ほとんどの場合、ガベージ コレクターは継続して実行されるため、このメソッドを呼び出す必要はありません。 このメソッドは、主に特別な状況やテストで使用されます。
2020/01/12(日) 18:10:01.75ID:bIiQ1z8t0
>>373
せやな
ザ・ワールドだけで通じるよな
2020/01/12(日) 18:32:57.05ID:je4+hRX40
そして時は動き出す…!
2020/01/12(日) 19:53:41.49ID:VFqe+WSm0
out of memory.
2020/01/12(日) 20:13:16.17ID:6g8s1ic00
>>373
GC界隈では普通に使う表現
380デフォルトの名無しさん (ワッチョイ dfe5-alJZ)
垢版 |
2020/01/13(月) 00:43:38.40ID:5i4YDTtr0
csvファイルを取り込むため下のようなプログラムを作ったのですが
データに「"1,234",test」のようなカンマ区切りの金額データが含まれるため
「1」「234」「test」のように列が分けられ配列に格納されてしまいます。
「1234」「test」のような形で配列を取得するにはどうしたら良いでしょうか?

static void Main(string[] args)
{
string textFile = @"C:\temp\test.csv";
System.Text.Encoding enc = System.Text.Encoding.GetEncoding("shift_jis");
string[] lines = System.IO.File.ReadAllLines(textFile, enc);
foreach(string line in lines)
{
string[] stArrayData = line.Split(',');
Console.WriteLine(stArrayData);
}
}
2020/01/13(月) 00:49:22.13ID:3SwxEC/oa
nugetでcsvhelper
どうしても自前で車輪の再発明をしなければ気が済まないならTextFieldParserあたり
382デフォルトの名無しさん (ワッチョイ 7fad-UU8b)
垢版 |
2020/01/13(月) 00:50:08.91ID:wNJBXid30
>>380
https://dobon.net/vb/dotnet/file/readcsvfile.html
2020/01/13(月) 00:50:48.38ID:5a7SXLUb0
ダブルクオートの数は論理行内で偶数に
なる事に気がつけば
難しくないよね?
2020/01/13(月) 04:40:58.64ID:6QaMEdT10
Ruby なら、CSV モジュールを使うだけ

CSVでは、要素内に、列区切り文字(カンマ)・行区切り文字(改行)がある場合は、
その要素をクォート文字(ダブルクォーテーション)で囲まなければならない

要素内に、クォート文字がある場合は、クォート文字を2つにしてから、
その要素をクォート文字で囲まなければならない
2020/01/13(月) 11:08:21.47ID:0YkcX+ND0
>>384
クォート文字有り無しが混在している時点でCSVじゃねえってことか
2020/01/13(月) 11:21:19.23ID:5a7SXLUb0
元々のCSVはSuperCalc の形式(オズボーン1にバンドルされていた)
今目にするCSVの仕様は、管理工学研究所が定義したK3形式が元になっている

で、実際の処理には何の関係も無い
2020/01/13(月) 11:38:13.56ID:IOw3xBOoM
CSVという欠陥品はやめてJSONを使おう
JSONならテーブル形式も違和感ない
2020/01/13(月) 12:42:50.09ID:DisUSQsY0
丁度いいから聞きたいんだけどjsonのnugetってどれがいいんだ?
ニュートンでいいの?
2020/01/13(月) 13:17:46.09ID:lNXH+eFP0
utf8json
390デフォルトの名無しさん (ワッチョイ dfe5-alJZ)
垢版 |
2020/01/13(月) 16:30:16.82ID:5i4YDTtr0
csvhelperなるものがあるのですね
情報ありがとうございます
ドボンさんの情報は以前は参考にさせて頂いてましたが、
.NET2.0くらいのやり方が多いので、今はより洗練された方法がありそうだなと
思っておりました
2020/01/13(月) 21:40:59.14ID:n3H4xPlw0
>>388
いいの定義次第ではあるが
.NET Core 3.0以降はSystem.Text.Jsonが標準ライブラリに組み込まれた
.NET Frameworkだと4.6.1以降で使える
2020/01/13(月) 22:56:09.48ID:6QaMEdT10
>>385
クォート文字の有り無しは、混在できる

CSVでは、要素内に、列区切り文字(カンマ)・行区切り文字(改行)・クォート文字(ダブルクォーテーション)がある場合は、
その要素をクォート文字(ダブルクォーテーション)で囲まなければならない

ただし要素内に、クォート文字がある場合は、クォート文字を2つにしてから、
その要素をクォート文字で囲まなければならない

でも要素内に、それらの特殊文字が無いなら、クォート文字で囲まなくてもよい
393デフォルトの名無しさん (アウアウウー Saa3-7oRq)
垢版 |
2020/01/13(月) 23:01:31.99ID:kDbPI+DBa
それCSVっていうよりBASIC系のエスケープっぽいねw
そもそもCSVってカチッとした仕様がなかった気がするんだけど
2020/01/13(月) 23:06:38.56ID:VhiGJyHM0
>>393
RFCの定義はある
https://tools.ietf.org/html/rfc4180
2020/01/13(月) 23:18:49.19ID:lfPKL+oG0
>>393
もともとちゃんとした仕様が決まってないままに様々な方言が普及しちゃった後に、後付けでrfc4180が定義されたらしい。
396デフォルトの名無しさん (アウアウウー Saa3-7oRq)
垢版 |
2020/01/13(月) 23:30:20.68ID:kDbPI+DBa
>>394
斜め読みした感じ、それって定義じゃないのでは?
むしろ定義なんかないってはっきり言ってない?
定義はないけど多くの実装の最大公約数的な仕様はこうだって書いてあるだけじゃないの?
2020/01/13(月) 23:36:49.28ID:VaOcNYgw0
けっこう色々な種類のcsvファイル触ってきたけどこの定義から外れたもの見たことないから
とりあえずこの通りに実装しとけば問題ないけどね
2020/01/13(月) 23:37:58.26ID:tegDOPxe0
>>394
そもそもこれstandards trackじゃないし。informationalやん
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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