2010-04-19 10 views
2

J'essaie de réaliser une situation où je charge un fichier dans le programme. Je peux utiliser streamreader pour cela. Chaque enregistrement comportera 7 lignes. Par conséquent les lignes 1,8,15,22, etc auront tous la même valeur. Comme le fera 2,9,16,23, etc et ainsi de suite.Lecture d'un fichier texte

Quelle est la meilleure façon d'y parvenir? Alors que quand je charge les enregistrements dans la liste, il reconnaît ce que je viens de dire. Merci

+1

comme une table? Si 1,8,15 etc. tous tiennent la même valeur * exacte, il n'y a pas beaucoup de point à lire le tout ... –

+0

@Luke: pourriez-vous s'il vous plaît donner un exemple de fichier d'entrée, et qu'est-ce que vous attendez en sortie ? – Vlad

+0

Le fichier d'entrée: Nom Adresse Numéro Email Livraison Instructions état Cependant, ce sera pour chaque client, vous vous retrouverez avec une longue liste dans un fichier texte où 1-7 est client 1, 8-15 est le client 2, etc – sark9012

Répondre

3

Lorsque vous dites que les lignes 1, 8, 15 etc. auront toutes la même valeur, voulez-vous dire en réalité qu'elles ont le même type de valeur? Sinon, pourquoi lire plus que les 7 premières lignes?

Je pense que quelque chose comme le ci-dessous pourrait fonctionner (pas testé le code).

string data; 
using(System.IO.StreamReader reader = new System.IO.StreamReader("filepath")) 
{ 
    data = reader.ReadToEnd(); 
} 

string[] lines = data.Split(Environment.NewLine); 

for(int index = 0; index < lines.Length; index += 7) 
{ 
    ListViewItem item = new ListViewItem(); 
    for(int innerIndex = 0; innerIndex < 7; innerIndex++) 
    { 
     item.SubItems.Add(lines[index + innerIndex]); 
    } 

    listView1.Items.Add(item); 
} 
+0

Oui, comme si j'avais des enregistrements de 7 lignes chacune. Donc disons que la première ligne est un nom de client, le 8ème sera la ligne de client suivante et ainsi de suite. J'ai besoin de 1-7 en tant que client 1, 8-15 en tant que client 2, je pense juste que je pense peut-être trop. – sark9012

+0

Je pense que le code ci-dessus (ou quelque chose de très similaire, car il n'est pas testé) devrait être ok alors. –

0

DEVENEZ [num_lines/7] x [7] tableau 2D

for (int i=0;i<num_lines/7;i++) 
    for (int t=0;t<7;t++) 
     my2darray[i][t] = orig_array[i*7+t]; 

Si je comprends bien votre question, qui organisera vos données de la manière désirée

1

Il semble que vous ayez besoin de créer une classe qui représentera chaque enregistrement (une propriété pour chacune des 7 lignes).

Ouvrez votre lecteur de flux. Do, commence à boucler alors qu'il y a encore des lignes à lire.

Pour chaque itération de votre boucle, lisez les 7 lignes en sept variables, puis créez une nouvelle instance de votre classe et définissez chaque propriété sur la valeur contenue dans la variable appropriée.

Ajouter cette classe à une collection (Liste <MyClass>, par exemple).

Votre ListView doit utiliser la collection d'objets que vous avez construite. Vous pouvez maintenant choisir une propriété pour agir en tant que valeur d'affichage.