cs_volnay
Messages postés12Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention24 mai 2006
-
18 mai 2006 à 08:30
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
8 juin 2006 à 17:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 8 juin 2006 à 17:43
Précision:
nroline est en fait un DWORD donc plage de 32 bits full, en VB aucune idée si est possible.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 8 juin 2006 à 17:42
http://bnmvp.free.fr/RemLine.zip Il y a la dll (3 Ko) et prog de test (tout en C...).
Le numéro de ligne est BASE 0 !!!
Le fichier est traité sur place sans utiliser de tmp, 256 Ko de mémoire (et rien d'autre) pendant le traitement.
Suppression de ligne sur txt de 1,6 Go en 1mn10, à voir selon PC.
Utilisation de la DLL depuis VB:
Declare Function bnRemLine Lib "bnLine.dll" (ByVal szFile As String, ByVal nroline As Long) As Long
Retourne
- 0 : NO ERROR
- -1: FICHIER NON DISPO OU SIZE > 2^63
- 1 : ERR MEMORY
- 2 : ERR SYSTEM (GetFileSize, ReadFile ou WriteFile)
Fichier doit être fermé, dll prend un accès exclusif dessus.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 7 juin 2006 à 22:41
OneHacker, pour revenir au sujet, 5 mn c'est pour supprimer une ligne très loin du début je pense.
Je peaufine et fais encore qlqs tests sur une dll et je vous la file ensuite, elle vient de supprimer la ligne 19800 en qlqs centièmes de seconde. J'essaie illico sur beaucoup plus gros, on verra.
Perso !
je vous rappel qu'il existe un forum pour ce genre de dicussion ! car plus sa va plus ça n'a rien a voir avec le code source donné :/
jsem2k1
Messages postés125Date d'inscriptionsamedi 11 décembre 2004StatutMembreDernière intervention12 août 20081 6 juin 2006 à 00:01
tien essay sa j'ai tester er sa marche
Imports System.Runtime.InteropServices
<DllImport("user.DLL", EntryPoint:="SendMessageA", SetLastError:=True, _
CharSet:=CharSet.Unicode, ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function SendMessageA( _
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As String) As Long
' Leave the body of the function empty.
End Function
vas aussi voir se site (http://msdn2.microsoft.com/fr-fr/library/5k8a3s7s.aspx) pour migré l'appelle des api
le type any n'est plus pris en compte
ratala
Messages postés248Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention22 juin 2008 5 juin 2006 à 20:20
il me dit : "Instruction non valide dans un espace de noms"
t'a pas une autre solution ?
jsem2k1
Messages postés125Date d'inscriptionsamedi 11 décembre 2004StatutMembreDernière intervention12 août 20081 5 juin 2006 à 19:32
dsl je me suis tromper c'est Private Declare Auto Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
c'est ce qui arrive quand on fait vite les chose
ratala
Messages postés248Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention22 juin 2008 5 juin 2006 à 18:36
Merci mais il me dit : Fin d'instruction attendue
qu'est que je peux faire ?
jsem2k1
Messages postés125Date d'inscriptionsamedi 11 décembre 2004StatutMembreDernière intervention12 août 20081 5 juin 2006 à 16:32
Private Auto Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
ratala
Messages postés248Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention22 juin 2008 5 juin 2006 à 15:25
Salut,
Quelqun pourrait me dire comment transformer cette declaration d'api vb6 en déclaration d'api .net ?
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 4 juin 2006 à 19:41
De plus j'ai testé tout à l'heure avec un texte de 3GO ca rame mais ca met 5 minutes c'est tout.
J'suis du meme avis que OneHacker !
puis lire un fichier de 1 Go ne pause pas de probleme quand on utilise 'Queue' lecture de l'item et destruction pour ne pas faire un auto denial of service lol
il me semble qu'il existe de multiple choix pour effacé une ligne dans un fichier ... tout depand quel est le type de fichier a lire, c'est sur que lire un fichier qui fait 50 Ko n'est pas la meme chose qu'un fichier qui fait 5 Go ...
@+
www.troxsa.info
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 3 juin 2006 à 23:54
Normal on va pas travailler sur des textes énormes !
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 juin 2006 à 18:33
Une fonction se doit de tourner à tout coup, essaie sur un fichier de 1 Go et tu verras de suite que ce sera l'injurebox "manque de mémoire".
Question vitesse de traitement, une horreur.
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 3 juin 2006 à 14:09
Mais tout simplement en une fonction !
par ex :
Function NewText(ByVal Text As String, ByVal IndexLine As Integer)
' IndexLine et l'index de la ligne à supprimer
Dim result As String = Text ' Valeur à renvoyer
For Each line As String In result.Split(NewLine)
If result.Split(NewLine).IndexOf(result.Split(NewLine), line) = IndexLine Then
result.Replace(line, "")
End If
Next
Return result
End Function
jsem2k1
Messages postés125Date d'inscriptionsamedi 11 décembre 2004StatutMembreDernière intervention12 août 20081 24 mai 2006 à 17:25
Wao Merci mec tu vient de m'apprande une chose vraiment utile la et dire que j'étais rester dans l'iniorance tout ce tant. heheh C'est géniale ton truc et rapide en plus
Je retire ce que j'ai dit plus haut hehe
Merci pour ton savoir BrunNews
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 24 mai 2006 à 12:21
jsem2k1
Messages postés125Date d'inscriptionsamedi 11 décembre 2004StatutMembreDernière intervention12 août 20081 24 mai 2006 à 10:38
BruNews le problème c'est pas tant le fait de metre sa dans un vecteur et de garder le tout en mémoire. si ce n'étais que sa t'aurais trouver la solution magique. Le problème qui se pose c'est qu'il est impossible ( du moins je crois) de facon syncrone d'écrire et de lire en plein milieux d'un ficher texte. Imagine que tu veux modifier une ligne selon certain critaire. Avec un fichier syncrone tu es obliger de parcourire le fichier au complet ( du moins ligne par ligne). imagine que ce que tu veux trouver se trouve a la dernière ligne du fichier et que tu ne le sais pas et qu'il y a plus de 1 000 lignes de 600 caractère chacune.... t'est fait. Vas te chercher un café et soit patiant. Si tu veux juste récupéré une ligne en particulier ce n'est pas si pire car tu peux réussire a bien t'en sortir si ton ficher est ordonner mais obli sa si ton fichier ne l'est pas. C'est pour sa qu'un acces asyncrone sur des fichier est toujours apréciet mais pour sa il faut que le fichier soit bien ordonner et que tu connaisse la structure de ton ficher.
Ta solution est donc peux pratique en se sence la. Mais de toute facon ce n'est pas trop professionelle que de créé des double de fichier comme sa. Si ton aplis dou géré une grande quantité de fichier de grande taille avec des resource limité c'est pas la joi
Mais j'avoue que ta solution a incontestablement ces avantage
cs_volnay
Messages postés12Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention24 mai 2006 24 mai 2006 à 10:18
ok Brunews mais de toutes façons tu es obligé de faire un truc séquentiel qui passe en revue toutes les lignes du fichier meme si tu dois insérer du texte à la 2eme ligne. c'est vrai ta methode evite de passer par un tableau.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 24 mai 2006 à 10:07
Pourquoi pas d'autre solution ???
Au lieu de mettre dans un tableau, on écrit les lignes qu'on veut garder direct dans un second fichier, quand fini on ferme les 2, on supprime l'original et on renomme le 2eme du nom du 1er. Sera + rapide et quasi rien en conso mémoire sinon sera impossible sur gros fichiers.
Ensuite c'est comme d'hab, si on veut du vraiment rapide, on écrit la routine en C dans un dll et on l'appelle quand besoin, sera absolument incomparable en perfs.
jsem2k1
Messages postés125Date d'inscriptionsamedi 11 décembre 2004StatutMembreDernière intervention12 août 20081 24 mai 2006 à 09:38
En effet les fichier texte son en déclain mais il y a toujours les xml c'est magique comme type de ficher et de plus les classe xml son dirrectement parti du framework. Il sont une partie importante de DotNet. Pas étonant c'est magique ce truc la.
Mais bon pour revenir a ta procédure sa va prendre une éternité et bouffé beaucoup de resource système s'il y a des milier de ligne. Mais de toute facon si on a un aussi gros fichier texte c'est surement parce qu'on utilise un éditeur de texte.
drakins
Messages postés4Date d'inscriptionmercredi 17 mai 2006StatutMembreDernière intervention14 juin 2013 22 mai 2006 à 23:08
Salut Volnay,
Oui je pense que ca doit prendre du temps avec des milliers de lignes, mais pour le moment (j'ai beauçoup chercher aussi) il n'y a pas d'autre solution.Et je serais étonner qu'il y'en a une autre un jour, avec les BDD qui sont bien plus pratique que les fichier txt.
cs_volnay
Messages postés12Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention24 mai 2006 22 mai 2006 à 08:23
Salut Drakins,
J'ai été confronté récemment à ce problème d'insertion ou suppression de ligne dans un fichier texte et j'ai été surpris de voir qu'il n'existait rien de vraiment spécial dans le framework (a priori) qu'une des solutions était de tout recopier le ficher txt dans un tableau. Mais bon ça doit vraiment être lent avec un fichier de plusieurs milliers de ligne
cs_et1
Messages postés250Date d'inscriptionvendredi 14 janvier 2005StatutMembreDernière intervention27 janvier 201110 21 mai 2006 à 16:17
Pour compiler avec Sharpdevelop :
Exécution > Compilé
drakins
Messages postés4Date d'inscriptionmercredi 17 mai 2006StatutMembreDernière intervention14 juin 2013 21 mai 2006 à 13:48
Bonjour Volnay,
J'ai fait des tests avec cette methode sur des fichiers de 30 lignes seulement pour le moment. Pour les temps de réponse, je ne sais pas. Comme je ne développe que de petite application, je ne mis suis jamais intéresser.
ratala
Messages postés248Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention22 juin 2008 21 mai 2006 à 11:31
Quelqun pourrait me dire comment on compile en .exe avec Sharpdevelop svp ?
cs_clementpat
Messages postés406Date d'inscriptionlundi 2 décembre 2002StatutMembreDernière intervention25 janvier 2014 20 mai 2006 à 11:40
Salut j'ai les 2 VB et VB net
vb net pas terrible pour la distribution d'application
ratala
Messages postés248Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention22 juin 2008 19 mai 2006 à 19:35
Tu sais pas ou je pourrai trouver Dotnet framework 2.0 ?
ratala
Messages postés248Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention22 juin 2008 19 mai 2006 à 18:17
Genial !
cs_et1
Messages postés250Date d'inscriptionvendredi 14 janvier 2005StatutMembreDernière intervention27 janvier 201110 19 mai 2006 à 17:53
Bonjour,
vive la question...lol évidemment que oui.
Pour programmer en vb.net si tu n'as pas Microsoft Visual Basic .net, voici un compilateur gratuit : http://www.sharpdevelop.net/ ---
Mon site :
Pleins de logiciels, trucs astuces et aide pour VB.net ...
www.et1-vb.net
ratala
Messages postés248Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention22 juin 2008 19 mai 2006 à 17:12
A ok, merci.
Et est-ce qu'il est possible de faire des .exe et des .dll avec du VB.NET ?
Est-ce qu'il est possible de trouver un compilateur VB.NET gratuit ?
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200824 19 mai 2006 à 09:44
Ah la la .. L'éternel débat "VB ou VB.NET" !!
Si les deux existent, c'est qu'ils ont un intérêt.
Il faut juste savoir que VB6 n'évoluera plus, alors que VB.NET est la dernière mouture de Microsoft, et que .NET sera au coeur de tout ce qu'ils vont faire dans les prochaines années.
Suivant tes besoins, il faut choisir l'un ou l'autre (ou les deux).
ratala
Messages postés248Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention22 juin 2008 18 mai 2006 à 21:42
Salut tout le monde, je suis tombé sur ta source (qui m'avait l'air intéréssante) et puis je me suis rendu compte que c'était du dotnet, maintenant que je voi toutes ces sources en dotnet je me pose la question : qu'est-ce qui est mieux : VB ou VB.net ??
parce que j'hésite a passer en dotnet...
@+
cs_volnay
Messages postés12Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention24 mai 2006 18 mai 2006 à 08:30
As tu deja fais des tests avec ta methode sur un gros fichier texte, quel sont les temps de réponse?
8 juin 2006 à 17:43
nroline est en fait un DWORD donc plage de 32 bits full, en VB aucune idée si est possible.
8 juin 2006 à 17:42
Il y a la dll (3 Ko) et prog de test (tout en C...).
Le numéro de ligne est BASE 0 !!!
Le fichier est traité sur place sans utiliser de tmp, 256 Ko de mémoire (et rien d'autre) pendant le traitement.
Suppression de ligne sur txt de 1,6 Go en 1mn10, à voir selon PC.
Utilisation de la DLL depuis VB:
Declare Function bnRemLine Lib "bnLine.dll" (ByVal szFile As String, ByVal nroline As Long) As Long
Retourne
- 0 : NO ERROR
- -1: FICHIER NON DISPO OU SIZE > 2^63
- 1 : ERR MEMORY
- 2 : ERR SYSTEM (GetFileSize, ReadFile ou WriteFile)
Fichier doit être fermé, dll prend un accès exclusif dessus.
7 juin 2006 à 22:41
Je peaufine et fais encore qlqs tests sur une dll et je vous la file ensuite, elle vient de supprimer la ligne 19800 en qlqs centièmes de seconde. J'essaie illico sur beaucoup plus gros, on verra.
6 juin 2006 à 12:53
je vous rappel qu'il existe un forum pour ce genre de dicussion ! car plus sa va plus ça n'a rien a voir avec le code source donné :/
6 juin 2006 à 00:01
Imports System.Runtime.InteropServices
<DllImport("user.DLL", EntryPoint:="SendMessageA", SetLastError:=True, _
CharSet:=CharSet.Unicode, ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function SendMessageA( _
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As String) As Long
' Leave the body of the function empty.
End Function
vas aussi voir se site (http://msdn2.microsoft.com/fr-fr/library/5k8a3s7s.aspx) pour migré l'appelle des api
le type any n'est plus pris en compte
5 juin 2006 à 20:20
t'a pas une autre solution ?
5 juin 2006 à 19:32
c'est ce qui arrive quand on fait vite les chose
5 juin 2006 à 18:36
qu'est que je peux faire ?
5 juin 2006 à 16:32
5 juin 2006 à 15:25
Quelqun pourrait me dire comment transformer cette declaration d'api vb6 en déclaration d'api .net ?
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
4 juin 2006 à 19:41
4 juin 2006 à 08:19
puis lire un fichier de 1 Go ne pause pas de probleme quand on utilise 'Queue' lecture de l'item et destruction pour ne pas faire un auto denial of service lol
il me semble qu'il existe de multiple choix pour effacé une ligne dans un fichier ... tout depand quel est le type de fichier a lire, c'est sur que lire un fichier qui fait 50 Ko n'est pas la meme chose qu'un fichier qui fait 5 Go ...
@+
www.troxsa.info
3 juin 2006 à 23:54
3 juin 2006 à 18:33
Question vitesse de traitement, une horreur.
3 juin 2006 à 14:09
par ex :
Function NewText(ByVal Text As String, ByVal IndexLine As Integer)
' IndexLine et l'index de la ligne à supprimer
Dim result As String = Text ' Valeur à renvoyer
For Each line As String In result.Split(NewLine)
If result.Split(NewLine).IndexOf(result.Split(NewLine), line) = IndexLine Then
result.Replace(line, "")
End If
Next
Return result
End Function
24 mai 2006 à 17:25
Je retire ce que j'ai dit plus haut hehe
Merci pour ton savoir BrunNews
24 mai 2006 à 12:21
Regarde ici pour t'en convaincre:
http://www.cppfrance.com/code.aspx?id=19169
ou: http://www.cppfrance.com/code.aspx?ID=31892
24 mai 2006 à 10:38
Ta solution est donc peux pratique en se sence la. Mais de toute facon ce n'est pas trop professionelle que de créé des double de fichier comme sa. Si ton aplis dou géré une grande quantité de fichier de grande taille avec des resource limité c'est pas la joi
Mais j'avoue que ta solution a incontestablement ces avantage
24 mai 2006 à 10:18
24 mai 2006 à 10:07
Au lieu de mettre dans un tableau, on écrit les lignes qu'on veut garder direct dans un second fichier, quand fini on ferme les 2, on supprime l'original et on renomme le 2eme du nom du 1er. Sera + rapide et quasi rien en conso mémoire sinon sera impossible sur gros fichiers.
Ensuite c'est comme d'hab, si on veut du vraiment rapide, on écrit la routine en C dans un dll et on l'appelle quand besoin, sera absolument incomparable en perfs.
24 mai 2006 à 09:38
Mais bon pour revenir a ta procédure sa va prendre une éternité et bouffé beaucoup de resource système s'il y a des milier de ligne. Mais de toute facon si on a un aussi gros fichier texte c'est surement parce qu'on utilise un éditeur de texte.
22 mai 2006 à 23:08
Oui je pense que ca doit prendre du temps avec des milliers de lignes, mais pour le moment (j'ai beauçoup chercher aussi) il n'y a pas d'autre solution.Et je serais étonner qu'il y'en a une autre un jour, avec les BDD qui sont bien plus pratique que les fichier txt.
22 mai 2006 à 08:23
J'ai été confronté récemment à ce problème d'insertion ou suppression de ligne dans un fichier texte et j'ai été surpris de voir qu'il n'existait rien de vraiment spécial dans le framework (a priori) qu'une des solutions était de tout recopier le ficher txt dans un tableau. Mais bon ça doit vraiment être lent avec un fichier de plusieurs milliers de ligne
21 mai 2006 à 16:17
Exécution > Compilé
21 mai 2006 à 13:48
J'ai fait des tests avec cette methode sur des fichiers de 30 lignes seulement pour le moment. Pour les temps de réponse, je ne sais pas. Comme je ne développe que de petite application, je ne mis suis jamais intéresser.
21 mai 2006 à 11:31
20 mai 2006 à 11:40
vb net pas terrible pour la distribution d'application
19 mai 2006 à 19:35
19 mai 2006 à 18:17
19 mai 2006 à 17:53
vive la question...lol évidemment que oui.
Pour programmer en vb.net si tu n'as pas Microsoft Visual Basic .net, voici un compilateur gratuit : http://www.sharpdevelop.net/
---
Mon site :
Pleins de logiciels, trucs astuces et aide pour VB.net ...
www.et1-vb.net
19 mai 2006 à 17:12
Et est-ce qu'il est possible de faire des .exe et des .dll avec du VB.NET ?
Est-ce qu'il est possible de trouver un compilateur VB.NET gratuit ?
19 mai 2006 à 09:44
Si les deux existent, c'est qu'ils ont un intérêt.
Il faut juste savoir que VB6 n'évoluera plus, alors que VB.NET est la dernière mouture de Microsoft, et que .NET sera au coeur de tout ce qu'ils vont faire dans les prochaines années.
Suivant tes besoins, il faut choisir l'un ou l'autre (ou les deux).
18 mai 2006 à 21:42
parce que j'hésite a passer en dotnet...
@+
18 mai 2006 à 08:30