2011-12-28 2 views
0

.CSVファイルを読み込み、整数である各データを読み込み、単純に最大値を見つける方法を見つけようと苦労していますファイルの値。VB6で.CSVファイルを読み込み、最大数値を見つける:

私はこのファイルをExcelで開き、VB6を使用してExcelで計算を行っています。しかし、私は外部プログラムを使用する必要はありません。

誰かが.CSVファイルを開いて変数にデータエントリを読み込む方法を説明できますか。

これは何時間もありましたが、それは私を絶対に狂ってしまいます。

私はそこから残りを簡単に行うことができます。 CSVでの1列のみを想定している男/ギャル

おかげで...

答えて

3
Dim F As Long, d As Double, dMax As Double 
F = Freefile 
Open "file.csv" For Input As F 
While Not Eof(F) 
    Input #F, d 
    If d > dMax Then dMax = d 
Wend 
Close F 
MsgBox "Max is " & dMax 

。使用

Input #F, col1, col2, col3 

など...複数の列の場合。

+0

ありがとうございます! "file.csv"の代わりに私のディレクトリ/ファイルを入力するとエラーになります。私は、私の頭脳がこの時点で出てくるように、ろうそくを燃やしていたかもしれないと思います。例:Dim strFilePath As String strFilePath = dirBox.Path& "\"&filBox。ないEOF(F) 入力は#f、D ながら F限り、入力のためにダブル オープンstrFilePathとしてダブル、DMAXとしてDとファイル名 薄暗いF> DMAXその後DMAX = D Wendの のMsgBox F閉じる dの場合"Max is"&dMax – Defektive

+0

宣言の後、Openファイル部分の前にf = FreeFileを追加しました。ヘルプマットありがとう。あなたはすごいね! – Defektive

+0

申し訳ありません、忘れました。私はそれに答えを加えます。私がiPadで答えようとすると何が得られますか? –

1

問題の根本は、一度に1行ずつファイルを読み取っているようです。私はScripting.FileSystemObject http://support.microsoft.com/kb/186118を使ってその仕事をしたいと思います。組み込みのInputステートメントよりもはるかに使いやすいです。ここでは、そのページからいくつかのコードは次のとおりです。

Private Sub Command1_Click() 
    'Declare variables. 
    Dim fso As New FileSystemObject 
    Dim ts As TextStream 
    'Open file.' 
    Set ts = fso.OpenTextFile(Environ("windir") & "\system.ini") 
    'Loop while not at the end of the file.' 
    Do While Not ts.AtEndOfStream 
     Debug.Print ts.ReadLine 
    Loop 
    'Close the file.' 
    ts.Close 
End Sub 

テキストの行を持っていると、それが数値だかどうかを確認するために各1を調べ、その後、値の配列を取得するためにスプリットを使用しています。そうである場合は、検索の値を最大値に含めます。 Is there a VB6 function analagous to C's sscanf?

2

Jet Text IISAMは、表形式のテキストを含むファイルのあらゆる種類の処理のための強力なツールとなります。単純なクエリ、ファイル間の結合、クエリ内のVBA式サービス式の埋め込み、入力ファイルの別の出力形式への変換など、さまざまなことができます。

schema.iniファイルを追加すると、区切り文字、列の名前付け、データ型の形式を細かく制御でき、固定フィールドのテキストも処理できます。

'Requires a reference to ADO 2.5 or later. 

Private Function GetMax(_ 
    ByVal FieldNum As Integer, _ 
    ByVal CSVFile As String, _ 
    Optional ByVal CSVFolder As Variant) As Variant 
    'Find max value in field FieldNum of CSVfile, assumed 
    'here to be a HDR=No CSV file so field names are F1, 
    'F2, etc. 

    Dim rsResult As ADODB.Recordset 

    If IsMissing(CSVFolder) Then 
     CSVFolder = App.Path 
    ElseIf VarType(CSVFolder) <> vbString Then 
     CSVFolder = App.Path 
    End If 

    Set rsResult = New ADODB.Recordset 
    With rsResult 
     .CursorLocation = adUseClient 
     .Open "SELECT Max(F" & CStr(FieldNum) & ") FROM [" & CSVFile & "]", _ 
       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" _ 
       & CSVFolder _ 
       & "';Extended Properties='Text;HDR=No'", _ 
       adOpenStatic, adLockReadOnly, adCmdText 
     GetMax = .Fields(0).Value 
     .Close 
    End With 
End Function 

を、これはやり過ぎのように見えることができますが、それは他の多くのテキストテーブル処理のアイデアの「胚芽」を検討:単純にかかわらず、列の最大値を見つけるために

これは、VBと同じようにVBScriptで効果的で便利です。

詳細については、Processing Text Databasesを参照してください。

関連する問題