2009-06-14 7 views
1

j'ai un fichier texte avec les données suivantes:lecture du fichier dans un tableau

Les concentrations calculées
30,55 73,48 298,25 27,39 40,98 11,21 99,22 33,46 73,99 12,18 30,7 50 28,4 34,33 29,55 70,48 43,09 28,54 50,78 9,68 62,03 63,18 28,4 100 23,83 68,65 10,93 ?????? 31,42 8,16 24,97 8,3 114,97 34,92 15,53 200 32,15 29,98 23,69 ?????? 23,41 33,6 92,03 32,73 13,58 58,44 94,61 400 159,98 18,05 50,94 37,12 15,25 46,75 315,22 69,98 13,58 ?????? 58,77 208,82 11,07 38,15 86,31 35,5 41,88 28,25 5,39 40,83 29,98 54,42 69,48 36,09 13,16 23,26 19,31 147,56 31,86 6,77 19,45 33,6 32,87 205,47 134,21 ?????? 17,35 9,96 58,61 13,44 23,97 22,13 145,17 29,55 26,54 37,12 198,333

et je voudrais charger ces données dans un tableau.

  1. Comment puis-je permettre à l'utilisateur d'ouvrir un fichier de son choix dans vb.net?
  2. comment puis-je lire ces valeurs dans un tableau dans vb.net?

je voudrais préciser que ce personne-b a proposé des œuvres très très bien. spécifiquement les champs = calculationText.split ("") était exactement ce dont j'avais besoin; Cependant, mon prochain numéro est le suivant. les données ci-dessus est en fait dans ce format:

http://pastebin.com/d29ae565b

où le besoin i la première valeur à 0, puis 50, puis 100, etc., et je en ai besoin de lire des colonnes de gauche à droite. le problème est que les valeurs ne lisent pas dans le tableau de cette manière. les valeurs sont en train de lire comme ceci: 6.65, 84.22, ????, 35.15. aidez s'il vous plaît!

Répondre

4

Pour lire un fichier dans une variable String, dans VB.NET, vous pouvez utiliser la fonction System.IO.File.ReadAllText(). Un exemple est:

Imports System.IO '// placed at the top of the file' 

'// some code' 

Dim calculationText As String 
calculationText = File.ReadAllText("calculations.txt") '// gets all the text in the file' 

"calculations.txt" est le nom de fichier.

A votre prochain point - pour permettre à l'utilisateur de charger un fichier de son choix, vous pouvez utiliser le type OpenFileDialog.Un exemple:

Dim fileName As String 
Dim openDlg As OpenFileDialog 
openDlg = New OpenFileDialog() '// make a new dialog' 
If openDlg.ShowDialog() = DialogResult.OK Then 
    '// the user clicked OK' 
    fileName = openDlg.FileName '// openDlg.FileName is where it keeps the selected name' 
End If 

En combinant cela, nous obtenons:

Imports System.IO 

'// other code in the file' 

Dim fileName As String 
Dim openDlg As OpenFileDialog 
openDlg = New OpenFileDialog() '// make a new dialog' 
If openDlg.ShowDialog() = DialogResult.OK Then 
    '// the user clicked OK' 
    fileName = openDlg.FileName 
End If 

Dim calculationText As String 
calculationText = File.ReadAllText(fileName) 

Maintenant, nous avons besoin de traiter l'entrée. Premièrement, nous devons faire une liste de nombres décimaux. Ensuite, nous mettons tout dans le fichier qui est un numéro dans la liste:

Dim numbers As List(Of Decimal) 
numbers = New List(Of Decimal)() '// make a new list' 

Dim fields() As String 
fields = calculationText.Split(" ") '// split all the text by a space.' 

For Each field As String in fields '// whats inside here gets run for every thing in fields' 
    Dim thisNumber As Decimal 
    If Decimal.TryParse(field, thisNumber) Then '// if it is a number' 
     numbers.Add(thisNumber) '// then put it into the list' 
    End If 
Next 

Cela ne comprend pas Calculated Concentrations ou ????? dans la liste. Pour le code utilisable, il suffit de combiner le deuxième et le dernier échantillon de code.

EDIT: En réponse au commentaire ci-dessous.
Avec List objets, vous pouvez les indexer comme ceci:

Dim myNumber As Decimal 
myNumber = numbers(1) 

Vous n'avez pas besoin d'utiliser la propriété Item. En outre, lors de l'affichage dans une boîte de message, vous devez transformer en un type String d'abord, comme ceci:

MsgBox(myNumber.ToString()) 
+0

@ personne-b hey votre code ne fonctionne pas, ce n'est pas l'analyse syntaxique –

+0

Oh. :-) Pouvez-vous me donner un message d'erreur ou une exception? –

+0

sûr! Eh bien, il ne donne pas un message d'erreur, mais quand j'essaye ce code, il me donne un msgbox de "0" tout le temps Pour chaque champ As String Dans les champs Dim thisNumber As Decimal numbers.Add (thisNumber) MsgBox (thisNumber) 'Si Decimal.TryParse (champ, thisNumber) Puis MsgBox (thisNumber) 'numbers.Add (thisNumber) ' End If Next –

2
  1. OpenFileDialog
  2. Lire par caractère par caractère, à la recherche d'espaces pour marquer la fin d'un numéro, puis analyser le nombre d'ajouter à une liste. Ou si le fichier est toujours court, vous pouvez utiliser StreamReader.ReadToEnd et String.Split.

code pour commencer (converti automatiquement de C#):

Dim ofd = New OpenFileDialog() 
ofd.Title = "Select Data File" 

If ofd.ShowDialog() = DialogResult.OK Then 
    Dim data As New StreamReader(ofd.FileName.ToString()) 
    While data.Read() <> " "c 


    End While 
    ' Read past Calculated 
    While data.Read() <> " "c 


    End While 
    ' Read past Concentrations 
    Dim concentBuilder As New StringBuilder() 
    Dim last As Integer 

    Dim concentrations As New List(Of Double)() 
    Do 
     last = data.Read() 
     If last = " "c OrElse last = -1 Then 
      Dim concentStr As String = concentBuilder.ToString() 
      concentBuilder.Remove(0, concentBuilder.Length) 

      Dim lastConcentration As Double 
      Dim parseSuccess As Boolean = [Double].TryParse(concentStr, lastConcentration) 
      If Not parseSuccess Then 
       Console.[Error].WriteLine("Failed to parse: {0}", concentStr) 
      Else 
       concentrations.Add(lastConcentration) 
      End If 
     Else 
      concentBuilder.Append(CChar(last)) 
     End If 
    Loop While last <> -1 

    For Each d As Double In concentrations 
     Console.WriteLine(d) 
    Next 
End If 
2

Une fois que vous avez le fichier provenant d'un contrôle OpenFileDialog ou un autre contrôle de l'interface utilisateur. Voici quelque chose que vous pourriez faire:

Dim filePath As String = "file.txt" ''* file coming from control 
Dim fileContents As String = System.IO.File.ReadAllText(filePath) 
Dim contentArray() As String = fileContents.Split(" ") 

Ensuite, vous pouvez parcourir la rangée et TryParse jusqu'à un nombre tel que nécessaire.

Questions connexes