Bonjour,
Je dispose d'une database *.SQL de 600 Mo en seul morceau et d'une base au format *.txt de taille moyenne 10Mo
Mon but rechercher la présence d'un mot clef "details:" en début de chaque ligne et comparer le contenu qui suit dans la ligne entre les deux fichiers, les compter et les transcrire dans un troisième fichier resultat.txt.
Dans le fichier SQL il y a 600000 mot clef "details:". Dans le fichier txt 1000.
Il me semble clair qu'il faille lire les datas ligne par ligne pour par exploser la mémoire (pourtant de 4Go). Ce programme sera utilisé dans des configs plus légères. J'ai vu quelques idées sur la toile, je vais gratter dans ce sens.
Je ne fait que lire dans la database SQL, je n'y écrit pas.
J'ai par ailleurs 'explosé' cette base SQL en dix fichiers txt avec NotePad de win 10 sans problème. Est-ce une autre solution de comparaison plus simple ?
Par exemple le code suivant ouvre un fichier de 50 Mo sans problème mais pas 600 Mo
Il y aura un message d'erreur de mémoire avec un fichier de 600Mo !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim choisir As New OpenFileDialog If choisir.ShowDialog() = 1 Then TextBox1.Text = choisir.FileName End If End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click If IO.File.Exists(TextBox1.Text) Then TextBox1.Text = IO.File.ReadAllText(TextBox1.Text) Else MessageBox.Show("Le fichier n'existe pas") End If End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click End End Sub End Class
Le problème est que cette base SQL vit et s'agrandit de jour en jour il me faudra donc périodiquement (1x par trimestre) faire des comparaisons. Donc exploser la data en 10 fichiers txt n'est probablement pas la bonne solution (2 heures). Quoique !
Pouvez-vous me donner des conseils pour bien démarrer ? Merci d'avance.
Partager