C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: c#スクリプトを使用したテキストファイルの文字列抽出


(過去ログ 155 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■90214 / inTopicNo.1)  c#スクリプトを使用したテキストファイルの文字列抽出
  
□投稿者/ レイ (13回)-(2019/02/18(Mon) 14:41:58)

分類:[.NET 全般] 

c#を使用しテキストファイル内の特定の行数から特定の文字列を複数読み取るプログラムを作成しています
.123456...
のような数列があるのですが、カンマとカンマの間の文字列のみを抽出するというプログラムにする場合はコードはどのようなものになるのでしょうか?
c#を初めて使ったもので書き方から覚えているところなのですが、皆さまのお知恵をお貸しください
引用返信 編集キー/
■90218 / inTopicNo.2)  Re[1]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ 774RR (667回)-(2019/02/18(Mon) 15:00:53)
案件の整理がされていない。案件→仕様を先にまとめないとコードにならない。

カンマとカンマの間ってことは(半角フォントが読みにくいのであえて全角で示す)
1、23、45、67
という入力に対して「23」「45」を返せばいいのかな?その返し方はどうなってほしい?

他にも策定しないといけない仕様がありそうだけどまずはこの辺を確定。

引用返信 編集キー/
■90219 / inTopicNo.3)  Re[2]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ レイ (14回)-(2019/02/18(Mon) 15:07:42)
No90218 (774RR さん) に返信
回答ありがとうございます
、123456、、、ならば
123456だけを抽出しテキストファイルにまとめて行きたいのです
引用返信 編集キー/
■90220 / inTopicNo.4)  Re[3]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ 774RR (668回)-(2019/02/18(Mon) 15:13:44)
いやそれではオイラの質問の回答になっていない。再考慮。
引用返信 編集キー/
■90221 / inTopicNo.5)  Re[1]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ 魔界の仮面弁士 (2061回)-(2019/02/18(Mon) 15:16:29)
2019/02/18(Mon) 15:16:48 編集(投稿者)

No90214 (レイ さん) に返信
> .123456...
> のような数列があるのですが、カンマとカンマの間の文字列のみを抽出する
「.」はピリオドすよね。
カンマは「,」です。


> c#を初めて使ったもので
誤:c#
正:C#


> コードはどのようなものになるのでしょうか?
string filePath = @"C:\TEMP\TEST.TXT";

string[][] data = System.IO.File.ReadLines(filePath, System.Text.Encoding.Default).Select(_ => _.Split(',')).ToArray();

MessageBox.Show( data[0][1] ); // 行番号0、列番号1 のテキストを取り出す
引用返信 編集キー/
■90224 / inTopicNo.6)  Re[4]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ レイ (15回)-(2019/02/18(Mon) 15:45:41)
フォルダ名をcsvからテキストファイルに落としリスト化しました。
robocopy コマンドを使用しユーザーIDを一つずつ読み込みデータをコピーするバッチファイルを作成しました。
しかしテキストファイルにリスト化したフォルダ名には前や後ろに,が大量にあるためカンマを全て取り除いたフォルダ名のみが書かれたテキストファイルを作成
する必要があり質問させていただきました。
今日C#を初めて触りましたので基礎的な知識が欠けている状態です。
C#で作ったソースコードはdosコマンドないに貼り付けられるのかすら分かっていない状況です。
どうかお力をお貸しください
引用返信 編集キー/
■90225 / inTopicNo.7)  Re[5]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ レイ (16回)-(2019/02/18(Mon) 15:46:19)
No90224 (レイ さん) に返信
> フォルダ名をcsvからテキストファイルに落としリスト化しました。
> robocopy コマンドを使用しフォルダ名を一つずつ読み込みデータをコピーするバッチファイルを作成しました。
> しかしテキストファイルにリスト化したフォルダ名には前や後ろに,が大量にあるためカンマを全て取り除いたフォルダ名のみが書かれたテキストファイルを作成
> する必要があり質問させていただきました。
> 今日C#を初めて触りましたので基礎的な知識が欠けている状態です。
> C#で作ったソースコードはdosコマンドないに貼り付けられるのかすら分かっていない状況です。
> どうかお力をお貸しください
引用返信 編集キー/
■90226 / inTopicNo.8)  Re[5]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ シャオ (1回)-(2019/02/18(Mon) 16:00:25)
No90224 (レイ さん) に返信
> フォルダ名をcsvからテキストファイルに落としリスト化しました。

そのCSVを正しく処理すれば、フォルダ名の情報を得られると思いますが、
今日C#を初めて触った、ということであれば、色々な意味でハードルが高いかも知れません。
もしかしたら、そのCSVをExcelで開けば手っ取り早いかも知れませんが、
Excelだと数字のみの値を勝手に数値と判断するので色々と問題がでますし。

引用返信 編集キー/
■90227 / inTopicNo.9)  Re[6]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ レイ (17回)-(2019/02/18(Mon) 16:17:06)
No90226 (シャオ さん) に返信
robocopy かdosコマンドでカンマを除去するか特定の文字列だけをぬき出せれば良いのですが
引用返信 編集キー/
■90228 / inTopicNo.10)  Re[5]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ 魔界の仮面弁士 (2062回)-(2019/02/18(Mon) 16:21:50)
No90224 (レイ さん) に返信
> C#で作ったソースコードはdosコマンドないに貼り付けられるのかすら分かっていない状況です。

C# は基本的に、コンパイルして .exe 等にしてから呼び出すものなので、
コマンド プロンプトから直接呼び出せるようにはなっておりません。
(C# スクリプトという物も無くは無いですが…)


コマンドとして利用したいのなら、C# よりも PowerShell をお奨めします。たとえば
,123456,,,
,234567,,,
という、ヘッダー行の無い CSV ファイルがあったとして、

$csv = Import-Csv -Encoding Default -Header COL1,UserId,COL3 -Path 'C:\TEMP\TEST.CSV'

のようにすると、$csv.Count でレコード件数(2 件)が得られますし、
$csv[0].UserId とすれば、先頭行にあった「123456」の部分を取り出せます。
引用返信 編集キー/
■90230 / inTopicNo.11)  Re[7]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ 魔界の仮面弁士 (2063回)-(2019/02/18(Mon) 16:27:28)
No90227 (レイ さん) に返信
> robocopy かdosコマンドでカンマを除去するか特定の文字列だけをぬき出せれば良いのですが

要件次第では、FindStr コマンドが使えるかも。
引用返信 編集キー/
■90231 / inTopicNo.12)  Re[8]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ レイ (18回)-(2019/02/18(Mon) 16:32:13)
No90230 (魔界の仮面弁士 さん) に返信
> ■No90227 (レイ さん) に返信
> 要件次第では、FindStr コマンドが使えるかも。
どのような要件なら使えますか?
引用返信 編集キー/
■90233 / inTopicNo.13)  Re[9]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ 魔界の仮面弁士 (2064回)-(2019/02/18(Mon) 17:36:38)
No90231 (レイ さん) に返信
>>要件次第では、FindStr コマンドが使えるかも。
> どのような要件なら使えますか?

「2 列目が数値列な CSV データ」なら
FINDSTR /R "^[^,]*,[0-9][0-9]*," C:\TEMP\TEST.CSV
とか
FINDSTR /N /R "^[^,]*,[0-9][0-9]*," *.CSV
などで列挙できます。

ただし行単位の検索を行うだけなので、これだけでは、
各行の何文字目から切り出せばよいかまでは分かりません。

DOS コマンドだけで文字位置を調べる方法については、下記を参照してみてください。
http://usskim.web.fc2.com/src-c/winbatch_string.html


追加のアプリを入れて良いのなら、LogParser.exe を併用するのも手です。
https://www.microsoft.com/ja-jp/download/details.aspx?id=24659

LogParser.exe "SELECT Field2 FROM C:\TEMP\*.csv WHERE Field2 IS NOT NULL" -i:CSV -headerRow:OFF -o:CSV -headers:OFF -q
引用返信 編集キー/
■90242 / inTopicNo.14)  Re[5]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ Jitta (435回)-(2019/02/19(Tue) 15:08:55)
No90224 (レイ さん) に返信
> フォルダ名をcsvからテキストファイルに落としリスト化しました。

「CSV ファイルからテキストファイルに落とした」といわれても、そもそも CSV ファイルはテキストファイルなので、何をどうしたのかさっぱりわかりません。


> robocopy コマンドを使用しユーザーIDを一つずつ読み込みデータをコピーするバッチファイルを作成しました。
> しかしテキストファイルにリスト化したフォルダ名には前や後ろに,が大量にあるためカンマを全て取り除いたフォルダ名のみが書かれたテキストファイルを作成
> する必要があり質問させていただきました。

774RRさんが書かれていますが、仕様を明確にしてください。
プログラムというのは、コンピュータに対する指示書です。「こうしろ。次のこうしろ。その次はこうしろ」と、するべきことを順番に並べたものです。
何をさせたいのか明確になっていないなら、プログラムは作れないし、プログラムができていないならコードは書けません。
あなたの頭の中では、明確なのかも知れません。
しかし、伝わっていません。
あなたは、自分の思考を他人に読ませることができるわけではないでしょうし、我々もあなたの頭の中をのぞけるわけではありません。
ここに書かれていることだけでしか、判断できません。

まず、仕様を整理してください。
具体的に、どういう文字列から、どういうルールで抜き出しを行いたいのでしょうか。

引用返信 編集キー/
■90243 / inTopicNo.15)  Re[6]: c#スクリプトを使用したテキストファイルの文字列抽出
□投稿者/ はまぐり (69回)-(2019/02/19(Tue) 17:11:21)
No90242 (Jitta さん) に返信

>> フォルダ名をcsvからテキストファイルに落としリスト化しました。

>「CSV ファイルからテキストファイルに落とした」といわれても、そもそも CSV ファイルはテキストファイルなので、何をどうしたのかさっぱりわかりません。

Jittaさんの理解の仕方が拙いように思いました

CSVファイルはテキストファイルである、は、Jittaさんの頭の中にある定義ですね
いいや一般的な定義だ、と、お思いかもしれませんがそこは大事じゃないです

一方で「CSV ファイルからテキストファイルに」というレイさんの文からは
CSV ファイルとテキストファイルが別個に存在してることがうかがえます

だからJittaさんはさっぱりわかりませんとお述べになったのだと思いますが
レイさんの言葉をJittaさんの定義で解釈するからさっぱりわからないという解に行き着くんです
暗号化されたデータを間違ったキーで複合化してるようなものです

言葉を理解するときは相手の定義にしたがわないといけないです
正しい複合化のキーを見つける方法がありまして今回は特別にそれを伝授したいと思います

まず相手が言ってること全体を正しいと仮定します
そうなるにはこういう前提が考えられるよね、こういう定義が考えられるよねと思いを巡らせます
そうしてたどり着いた定義が正しい複合化のキーです

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -