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

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

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

Re[3]: CSVの書き換え


(過去ログ 102 を表示中)

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

■60922 / inTopicNo.1)  CSVの書き換え
  
□投稿者/ ITB5259 (23回)-(2011/07/26(Tue) 11:16:15)

分類:[.NET 全般] 

OS ウインドウズ7
エクセル 2007

今 VBA でコードを作成しています。
友人がVBなのでVBに移行の可能性が有ります。
下記コードはVBAのコードですが、VBで下記の事が可能でしょうか



下記解析データで
MEMBER の4-9列を0又は1に変更する事が目的です。0か1かは計算でだします。
コンピュータ会社に確認したところ、カンマの数は全て下記のまま必要との事

下記コードはデータがない場合全てカンマをなくすコードになっています。
現状のままカンマを残しMEMBER の4-9列を0又は1に変更する事ができないでしょうか


** 解析データ **
-------------------------------------------------------------------------------
START Windows 8.00
TITLE
"例題2−曲線ばり(Ex-002)"
CONTROL
0,0,0, 4,9.80665, 5
M-CONTROL
1 , 1 , 0 , 0 , 0 , 0
0 , 0 , 0 , 5 , 80
1 ,2.0,1.1,60,2000
1 ,2.0,1.1,2.0,0.2,60
0 , 1 , 1 , 1 ,20,15, 1 ,,150
0 , 1 , 1 , 1 ,20,15,1.0,1.0
NODE
1,0.0,0.0,0.0,, 0,0.0,0.0,,0.0,
2,0.0,1.0,0.0,, 0,0.0,0.0,,0.0,
3,0.,0.9914448609,.13052619583,, 0,0.0,0.0,,0.0,
4,0.,0.9659258244,.25881905214,, 0,0.0,0.0,,0.0,
5,0.,0.9238795283,.38268344246,, 0,0.0,0.0,,0.0,
6,0.,0.8660253965,0.5000000126,, 0,0.0,0.0,,0.0,
7,0.,0.7933533292,0.6087614435,, 0,0.0,0.0,,0.0,
8,0.,0.7071067657,0.7071067966,, 0,0.0,0.0,,0.0,
9,0.,0.6087614088,0.7933533558,, 0,0.0,0.0,,0.0,
10,0.,0.4999999748,0.8660254184,, 0,0.0,0.0,,0.0,
11,0.,0.3826834021,0.923879545,, 0,0.0,0.0,,0.0,
12,0.,0.2588190099,0.9659258357,, 0,0.0,0.0,,0.0,
13,0.,0.1305261525,0.9914448666,, 0,0.0,0.0,,0.0,
14,0.0,0.0,1.0,, 0,0.0,0.0,,0.0,
BOUNDARY
1,""
2,1,1,1,1,1,1,,,,,,
MATERIAL
1,20.0E+10,7.6923E+10,,,,""
M-MATERIAL
1 ,21, 4 , 13 , 4 , 10 , 4 , 13 , 4 , 10 , 4 ,1,1,1,1,15
SECTION
G1, 1,1,1,0.02,0.02,,,,,1.2,1.2,,,,,0,0,,,,,""
MEMBER
1, 2, 3,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
2, 3, 4,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
3, 4, 5,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
4, 5, 6,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
5, 6, 7,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
6, 7, 8,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
7, 8, 9,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
8, 9, 10,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
9, 10, 11,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
10, 11, 12,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
11, 12, 13,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
12, 13, 14,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
AI-LOAD
0,0,1.0,2,0.2,0.0, 0
LOAD-DEFINITION
1,0,0,0,"",0
F-NODE
14,100.0,,,,,
CALCULATION-CASE
1,"解析ケース1",1,0, 1,1.0, 0,, 0,, 0,, 0,, 0,, 0,, 0,, 0,, 0,
STOP

-----------------------------------------------------------------
** データ書出し ** 下記コード VBA

Option Explicit

Sub CSV_Write()

Dim FileType, Prompt As String
Dim FileNamePath As Variant
'**************************************************************************
' メモ
' PRN で引き込んだエクセルの表をこのエクセル→csvで変換できる。
'**************************************************************************

Dim StartRow, StartColumn, Max_Row, Max_Column As Integer
Dim Rowcnt, Columncnt As Integer
Dim UsedCell As Range

Dim ch1 As Long

'**************************************************************************


FileType = "CSV ファイル (*.dat),*.dat"

Prompt = "保存するファイルの名前を付けてください"
'保存するファイルのパスを取得します
FileNamePath = SaveFileNamePath(FileType, Prompt)

If FileNamePath = False Then 'キャンセルボタンが押された
Exit Sub
End If


ch1 = FreeFile '空いているファイル番号を取得します
Open FileNamePath For Output As #ch1 'FileNamePath のファイルをオープンします

Set UsedCell = ActiveSheet.UsedRange '使用しているセルの取得

StartRow = 1
StartColumn = 1
Max_Row = UsedCell.Rows.Count

With UsedCell
For Rowcnt = StartRow To Max_Row
'各行に就いて最終行取得
Max_Column = .Cells(Rowcnt, .Columns.Count + 1).End(xlToLeft).Column - .Column + 1
For Columncnt = StartColumn To Max_Column - 1
Print #ch1, CStr(.Cells(Rowcnt, Columncnt).Value) & ",";
Next Columncnt
Print #ch1, CStr(.Cells(Rowcnt, Columncnt).Value)
Next Rowcnt
End With

Close #ch1 'ファイルを閉じます

Set UsedCell = Nothing

End Sub

Function SaveFileNamePath(FileType, Prompt) As Variant
SaveFileNamePath = Application.GetSaveAsFilename _
(ActiveSheet.Name, FileType, , Prompt)
End Function



引用返信 編集キー/
■60924 / inTopicNo.2)  Re[1]: CSVの書き換え
□投稿者/ 風太郎 (34回)-(2011/07/26(Tue) 13:14:14)
No60922 (ITB5259 さん) に返信
> OS ウインドウズ7
> エクセル 2007
>
> 今 VBA でコードを作成しています。
> 友人がVBなのでVBに移行の可能性が有ります。
> 下記コードはVBAのコードですが、VBで下記の事が可能でしょうか
>
>
>
> 下記解析データで
> MEMBER の4-9列を0又は1に変更する事が目的です。0か1かは計算でだします。
> コンピュータ会社に確認したところ、カンマの数は全て下記のまま必要との事
>
> 下記コードはデータがない場合全てカンマをなくすコードになっています。
> 現状のままカンマを残しMEMBER の4-9列を0又は1に変更する事ができないでしょうか
>
>
> ** 解析データ **
> -------------------------------------------------------------------------------
> START Windows 8.00
> TITLE
> "例題2−曲線ばり(Ex-002)"
> CONTROL
> 0,0,0, 4,9.80665, 5
> M-CONTROL
> 1 , 1 , 0 , 0 , 0 , 0
> 0 , 0 , 0 , 5 , 80
> 1 ,2.0,1.1,60,2000
> 1 ,2.0,1.1,2.0,0.2,60
> 0 , 1 , 1 , 1 ,20,15, 1 ,,150
> 0 , 1 , 1 , 1 ,20,15,1.0,1.0
> NODE
> 1,0.0,0.0,0.0,, 0,0.0,0.0,,0.0,
> 2,0.0,1.0,0.0,, 0,0.0,0.0,,0.0,
> 3,0.,0.9914448609,.13052619583,, 0,0.0,0.0,,0.0,
> 4,0.,0.9659258244,.25881905214,, 0,0.0,0.0,,0.0,
> 5,0.,0.9238795283,.38268344246,, 0,0.0,0.0,,0.0,
> 6,0.,0.8660253965,0.5000000126,, 0,0.0,0.0,,0.0,
> 7,0.,0.7933533292,0.6087614435,, 0,0.0,0.0,,0.0,
> 8,0.,0.7071067657,0.7071067966,, 0,0.0,0.0,,0.0,
> 9,0.,0.6087614088,0.7933533558,, 0,0.0,0.0,,0.0,
> 10,0.,0.4999999748,0.8660254184,, 0,0.0,0.0,,0.0,
> 11,0.,0.3826834021,0.923879545,, 0,0.0,0.0,,0.0,
> 12,0.,0.2588190099,0.9659258357,, 0,0.0,0.0,,0.0,
> 13,0.,0.1305261525,0.9914448666,, 0,0.0,0.0,,0.0,
> 14,0.0,0.0,1.0,, 0,0.0,0.0,,0.0,
> BOUNDARY
> 1,""
> 2,1,1,1,1,1,1,,,,,,
> MATERIAL
> 1,20.0E+10,7.6923E+10,,,,""
> M-MATERIAL
> 1 ,21, 4 , 13 , 4 , 10 , 4 , 13 , 4 , 10 , 4 ,1,1,1,1,15
> SECTION
> G1, 1,1,1,0.02,0.02,,,,,1.2,1.2,,,,,0,0,,,,,""
> MEMBER
> 1, 2, 3,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
> 2, 3, 4,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
> 3, 4, 5,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
> 4, 5, 6,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
> 5, 6, 7,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
> 6, 7, 8,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
> 7, 8, 9,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
> 8, 9, 10,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
> 9, 10, 11,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
> 10, 11, 12,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
> 11, 12, 13,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
> 12, 13, 14,0,0,0,0,0,0,G1, 0,0,,,,,,,,,,,,,,,,,,
> AI-LOAD
> 0,0,1.0,2,0.2,0.0, 0
> LOAD-DEFINITION
> 1,0,0,0,"",0
> F-NODE
> 14,100.0,,,,,
> CALCULATION-CASE
> 1,"解析ケース1",1,0, 1,1.0, 0,, 0,, 0,, 0,, 0,, 0,, 0,, 0,, 0,
> STOP
>
> -----------------------------------------------------------------
> ** データ書出し ** 下記コード VBA
>
> Option Explicit
>
> Sub CSV_Write()
>
> Dim FileType, Prompt As String
> Dim FileNamePath As Variant
> '**************************************************************************
> ' メモ
> ' PRN で引き込んだエクセルの表をこのエクセル→csvで変換できる。
> '**************************************************************************
>
> Dim StartRow, StartColumn, Max_Row, Max_Column As Integer
> Dim Rowcnt, Columncnt As Integer
> Dim UsedCell As Range
>
> Dim ch1 As Long
>
> '**************************************************************************
>
>
> FileType = "CSV ファイル (*.dat),*.dat"
>
> Prompt = "保存するファイルの名前を付けてください"
> '保存するファイルのパスを取得します
> FileNamePath = SaveFileNamePath(FileType, Prompt)
>
> If FileNamePath = False Then 'キャンセルボタンが押された
> Exit Sub
> End If
>
>
> ch1 = FreeFile '空いているファイル番号を取得します
> Open FileNamePath For Output As #ch1 'FileNamePath のファイルをオープンします
>
> Set UsedCell = ActiveSheet.UsedRange '使用しているセルの取得
>
> StartRow = 1
> StartColumn = 1
> Max_Row = UsedCell.Rows.Count
>
> With UsedCell
> For Rowcnt = StartRow To Max_Row
> '各行に就いて最終行取得
> Max_Column = .Cells(Rowcnt, .Columns.Count + 1).End(xlToLeft).Column - .Column + 1
> For Columncnt = StartColumn To Max_Column - 1
> Print #ch1, CStr(.Cells(Rowcnt, Columncnt).Value) & ",";
> Next Columncnt
> Print #ch1, CStr(.Cells(Rowcnt, Columncnt).Value)
> Next Rowcnt
> End With
>
> Close #ch1 'ファイルを閉じます
>
> Set UsedCell = Nothing
>
> End Sub
>
> Function SaveFileNamePath(FileType, Prompt) As Variant
> SaveFileNamePath = Application.GetSaveAsFilename _
> (ActiveSheet.Name, FileType, , Prompt)
> End Function
>
>
>

きっちり見ていませんが、文字列の抽出と置換 etcかと思われますね

>>下記コードはVBAのコードですが、VBで下記の事が可能でしょうか
可能だと考えます。

>>現状のままカンマを残しMEMBER の4-9列を0又は1に変更する事ができないでしょうか
規則性があるので、変更する事ができると考えます。




引用返信 編集キー/
■60927 / inTopicNo.3)  Re[2]: CSVの書き換え
□投稿者/ クーロン (1回)-(2011/07/26(Tue) 15:24:26)
No60924 (風太郎 さん) に返信

(質問の内容とは関係ありません。悪しからず。)

すごく読みにくいので、投稿内容すべてを引用するのはやめませんか?
引用返信 編集キー/
■60928 / inTopicNo.4)  Re[3]: CSVの書き換え
□投稿者/ 風太郎 (35回)-(2011/07/26(Tue) 15:42:12)
No60927 (クーロン さん) に返信

> すごく読みにくいので、投稿内容すべてを引用するのはやめませんか?

申し訳ないです。何も考えずに、引用してしまいました・・・
配慮が足りず、指導頂きましてありがとうございます。
以降注意させて頂きます。
引用返信 編集キー/
■60937 / inTopicNo.5)  Re[1]: CSVの書き換え
□投稿者/ Azulean (795回)-(2011/07/26(Tue) 22:23:56)
No60922 (ITB5259 さん) に返信
> 今 VBA でコードを作成しています。
> 友人がVBなのでVBに移行の可能性が有ります。
> 下記コードはVBAのコードですが、VBで下記の事が可能でしょうか

やりたいことを明示されていることはよいのですが、なぜコードを丸投げなのでしょうか?
VBA で実施していることを箇条書きか何かで説明し、VB でできるかと問えば十分な気がしますが、コードを読み解くことを読み手に求めるのはなぜでしょうか。

もし、説明できないコードの変換を依頼しているのであれば、まずは自分でどのような処理になっているか読み解いてください。
それができない状態で VB に移行するというのはバグを生む可能性が高いですし、余計に時間がかかる可能性があります。


> 下記コードはデータがない場合全てカンマをなくすコードになっています。
> 現状のままカンマを残しMEMBER の4-9列を0又は1に変更する事ができないでしょうか

ご自身で検討されましたか?
どう考えて、どう思ったかをまず述べてください。懸念事項や疑問点が具体的に明らかになっていれば、それについてアドバイスを得ることができるかもしれませんね。
引用返信 編集キー/
■60941 / inTopicNo.6)  Re[2]: CSVの書き換え
□投稿者/ ITB5259 (24回)-(2011/07/27(Wed) 05:01:55)
Azulean 様
回答ありがとうございす。

 VBはまだ勉強中で一般論として可能性が有るかどうかという意味です。
N8べ-シックにしてもVBAにしても特徴があり可能性のあるなしが詳しい
人は分かりますが、初めから無理であればあきらめるしかありません
その判断をまずVBに詳しい人に伺いたいと思いました。
 自分の専門分野では計算しなくても60%-70%の精度は経験上でます。
素人では何も出ません。


引用返信 編集キー/
■60943 / inTopicNo.7)  Re[3]: CSVの書き換え
□投稿者/ shu (880回)-(2011/07/27(Wed) 09:06:10)
No60941 (ITB5259 さん) に返信

ファイルの読み書きというのは特に言語に依存して可能、不可能が変わるものでは
ありません。ましてVBAで出来るファイルの読み書きがVBで出来ないはずがありません。
VBAというのはかなり制限のついたVBなのですから。提示されたプログラムは見ていませんので
そのまま使えるかといえば多分無理でしょう。書き換えるデータの元のbyte数と書き換え後のbyte数が
同じであればバイナリ読み書きで該当位置だけ書き換えるという方法もあります。
引用返信 編集キー/
■60972 / inTopicNo.8)  Re[1]: CSVの書き換え
□投稿者/ ちょこ (2回)-(2011/07/27(Wed) 21:46:40)
No60922 (ITB5259 さん) に返信

とりあえず、解析データの構造を把握されるのが第一だと考えます。

見出しのような行と、データのような行がある
見出しはどんな文字列なのか
データには何項目(カンマの数+1)あるのか
などなど…


把握されたうえで、プログラムでさせたい処理を考えて下さい。

http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_020.html
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_030.html

このあたりもご参考に
引用返信 編集キー/
■60974 / inTopicNo.9)  Re[3]: CSVの書き換え
□投稿者/ Azulean (799回)-(2011/07/27(Wed) 22:41:35)
No60941 (ITB5259 さん) に返信
>  VBはまだ勉強中で一般論として可能性が有るかどうかという意味です。

私の投げかけた疑問に対する反応であれば、少し残念に思います。

長いコードをそのまま貼り付けただけでは、読む人が減りますので回答を得られるチャンスが減ります。
自分にとって損になるので、”ポイントを押さえて短くよい質問をする”ということもご検討いただければと思います。


> その判断をまずVBに詳しい人に伺いたいと思いました。
(略)
>  自分の専門分野では計算しなくても60%-70%の精度は経験上でます。
> 素人では何も出ません。


知りたいということはわかりますが、コードをそのまま見せる必然性につながりません。
素人だから何も努力せずに聞いてよいと言うことはありません。

先にも書いたように、VBA のコードでやっていることを説明すれば十分ではありませんか?
そのくらいはチャレンジされても罰は当たらないと思いました。
(説明できるようになることで自分の中でも整理できて、問題が小さくなることもあるかもしれません)


No60943 (shu さん) に返信
> ましてVBAで出来るファイルの読み書きがVBで出来ないはずがありません。

その断定は危険だと思います。
たとえば、Excel のワークシート関数などを利用して簡単に書いていた処理が、VB に移植する際に自分で書かなくてはならなくなり、難易度が上がることはあり得ます。
VBA を搭載しているアプリケーションによってはさらに別の拡張機能を提供している可能性もあるので、「VBA でできて、VB でできないはずがない」はすべてについていえることではありません。(難易度の差だけかもしれません)
引用返信 編集キー/
■60977 / inTopicNo.10)  Re[2]: CSVの書き換え
□投稿者/ ITB5259 (25回)-(2011/07/28(Thu) 03:58:25)
皆さま

 回答ありがとうございます。
今、仕事の提出期限ぎりぎりで仕事の完了後
検討させていただきます。

引用返信 編集キー/
■60978 / inTopicNo.11)  Re[4]: CSVの書き換え
□投稿者/ shu (883回)-(2011/07/28(Thu) 07:45:00)
No60974 (Azulean さん) に返信

> ■No60943 (shu さん) に返信
>>ましてVBAで出来るファイルの読み書きがVBで出来ないはずがありません。
>
> その断定は危険だと思います。
> たとえば、Excel のワークシート関数などを利用して簡単に書いていた処理が、VB に移植する際に自分で書かなくてはならなくなり、難易度が上がることはあり得ます。
> VBA を搭載しているアプリケーションによってはさらに別の拡張機能を提供している可能性もあるので、「VBA でできて、VB でできないはずがない」はすべてについていえることではありません。(難易度の差だけかもしれません)

そうですね、もちろん難易度は変わると思います。簡単に書けたり、難しくなったり。可能かどうかという質問自体があまり意味がないことを
言いたかったのです。プロジェクトでVBを使用するとほぼ決まっているのにVBで書くことは可能ですか?と聞いてもしょうがないかなと。
ワークシート関数はVBAではないのでもし利用しているのであればその部分をVBで実現するのには少し手間がかかるとは思いますが、不可能では
ないと思います。

引用返信 編集キー/
■60979 / inTopicNo.12)  Re[3]: CSVの書き換え
□投稿者/ 風太郎 (36回)-(2011/07/28(Thu) 09:09:29)
No60977 (ITB5259 さん) に返信

> 検討させていただきます。

あえて苦言を。今回のみではないのですが、何故か文章から高圧さを受けます。
なんだか、仕事を上から与えられて、やりなさい!と言われている様な感じが・・・
関係のないレスなので、問題があれば削除致します。

ちなみに要件は、「文字列の操作(表現あってるかな・・)」を一通り学習すれば出来ますよ。
個人的にテストしてみての返信です。
引用返信 編集キー/
■61004 / inTopicNo.13)  Re[5]: CSVの書き換え
□投稿者/ くだん (2回)-(2011/07/28(Thu) 18:52:15)
No60978 (shu さん) に返信
> プロジェクトでVBを使用するとほぼ決まっているのにVBで書くことは可能ですか?と聞いてもしょうがないかなと。
同意。
プログラムという作業自体、出来る方法を考え出す作業ですからね。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -