Lire fichier texte et extraire des parties

Résolu
edwinzap - 23 mai 2013 à 22:35
 Utilisateur anonyme - 6 juin 2013 à 23:03
Bonjour.
Je désirerais pouvoir lire un fichier texte contenant des coordonnées de points (X,Y) par ligne comme ceci:
1.000000 0.113161
1.000000 -0.090921
0.975530 -0.089751
0.938150 -0.089231

et extraire chaque coordonnée afin de les mettre dans un tableau pour les utiliser par la suite.
Quel serait la meilleur façon de procéder?
-Lire chaque ligne et les mettre dans un tableau et ensuite extraire de ce tableau les coordonnées ou bien
-Prendre les 8 premiers caractères, puis les 8 suivants (après l'espace)
J'ai tester un peu la fonction Readblock mais je ne crois pas que se soit la meilleur solution (d'autant plus que je n'ai pas trouvé cmt extraire toutes les valeurs du buffer afin de placer le chiffre complet dans un tableau)
Il y a sans doute encore d'autres solutions

Merci de m'aider

24 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
6 juin 2013 à 20:37
Salut

Tu n'as pas besoin d'une nouvelle boucle
dans ta boule qui lit les données de ton fichier
déclare
Public Class Form1

private minpointx as single 
private minpointy as single 

Private ptmin As PointF

dans ta fonction
GetListPoint

'
je donne exprès une grande valeur 
'initialise les valeurs 
 minpointx  = 6000
 minpointy = 6000

'et dans ta boucle 
 pt.X = Convert.ToSingle(val(0))
 pt.Y = Convert.ToSingle(val(1))
 if pt.x < minpointx then
   minpointx = pt.x 
 end if 
if pt.y < minpointy then
   minpointy = pt.y 
 end if 
if (pt.x < minpointx) andalso  (pt.y < minpointy) then 
  ptmin = pt
end if
0
Ok merci

Je ne peux pas trier la liste (enfin je crois) car les éléments doivent rester dans cet ordre bien précis.
Il n'y a donc pas de fonction toute faite (on ne sais jamais ^^)
J'ai donc fais ceci:
        Dim MinX = listp1(1).X
        Dim MaxX = listp1(1).X
        Dim MinA = listp2(1).X
        Dim MaxA = listp2(1).X
        For Each element In listp1
            If MinX > element.X Then
                MinX = element.X
            End If
            If MaxX < element.X Then
                MaxX = element.X
            End If
        Next
        For Each element In listp2
            If MinA > element.X Then
                MinA = element.X
            End If
            If MaxA < element.X Then
                MaxA = element.X
            End If
        Next


Par contre je galère vraiment avec le clipboard.
Je voudrais bien copier tous les éléments sélectionner dans ma listeview pour pouvoir les coller sur excel (de la même manière, donc en 4 colonnes)

J'ai fait ceci:
    Private Sub ListView1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles ListView1.KeyDown
        If e.KeyCode = Keys.C Then
            If e.Modifiers = Keys.Control Then
                MsgBox(ListView1.SelectedItems.Count)
                Clipboard.Clear()
                Clipboard.SetText(ListView1.SelectedItems(0).Text)
            End If
        End If
    End Sub


Mais forcément ça ne prend qu'un seul item. Je n'arrive pas à mettre tous les éléments dans le clipboard (je suppose qu'il faut faire une boucle). Peut être faut-il utiliser Clipboard.ContainsFileDropList

Merci
0
Utilisateur anonyme
6 juin 2013 à 22:56
Bah sinon tu fais une requête linq qui ne touche pas à ta liste :
Dim lp As New List(Of PointF) From {New PointF(4.7, 3.6), New PointF(4.6, 4.5), New PointF(4.8, 2.1)}
Dim requete As IEnumerable(Of PointF) = (From pt As PointF In lp Order By pt.X Ascending, pt.Y Ascending)
MessageBox.Show(requete(0).X.ToString & "  " & requete(0).Y.ToString)
0
Utilisateur anonyme
6 juin 2013 à 23:03
Pour le collage dans excel, il faut connaitre le caractère de séparation des valeurs des cellules qui est utilisé habituellement dans le clipboard. Mais je ne suis pas VBAtiste. On ne pose qu'une question par topic (cf règlement du forum). Poste donc un autre sujet
0
Rejoignez-nous