Importer partiellement .TXT trop volumineux sinon
Bonjours à toutes et tous,
Voila, je suis etudiant, et je cherche dans le cadre d'un projet avec un indistriel à importer partiellement un fichier .txt:
J'ai déjà chercher 45 min sur le forum mais je ne trouve pas de reponse exacte à mon pb
Je reconnais etre débutant en marco, mais je ne demande qu'a apprendre.
Le système d'acquisition de données de l'industriel me sort un fichier TXT de 12 Mo bcp trop gros pour etre ouvert sous excel.
De plus le fichier text me sort dans ce fichier un tas d'informations dont je me fiche pour le post traitement.
Voila la forme du fichier txt:
Il y a 29 steps (donc 29 fois une meme série d'information collées à la suite les unes des autres)
Chaque série à la forme suivante:
Time Step 0, 25200 seconds
Part Ave Temp Min Temp Max Temp
(deg C) (deg C) (deg C)
1 (front) 25.9999 26 26
1 (back) 25.9999 26 26
2 (front) 25.9998 26 26
2 (back) 25.9998 26 26
420 (no geom) 26 N/A N/A
421 (no geom) 26 N/A N/A
422 (no geom) 26 N/A N/A
423 (no geom) 26 N/A N/A
'Ceci en vert est la partie qui m'interesse et que je veux garder en excel.
'ensuite il y a une partie de rappel de condition et de géometrie mais dont je me fiche
'et que je voudrais ne pas copier
Part 1
(front) Heat Rate (W)
QcondNet 0
QconvNet 0
QconvIn 0
QconvOut 0
Part 423
(no geom) Heat Rate (W)
QcondNet 0
QconvNet 0.0714269
QconvIn 2.52466
QconvOut 2.45323
QradNet 0
QradIn 0
QradOut 0
QadvNet 0
QadvIn 0
QadvOut 0
QsunNet 0
QimpNet 0
'Puis recommence une serie à garder
Time Step 1, 25500 seconds
Part Ave Temp Min Temp Max Temp
(deg C) (deg C) (deg C)
1 (front) 26.0057 26.0049 26.0184
1 (back) 26.0048 26.0041 26.0185
2 (front) 26.0054 26.0049 26.0191
2 (back) 26.0046 26.0041 26.0192
Le but serait donc d'importer dans excel que la partie verte, (et pas la rouge)
Je penser faire une macro qui:
1 - lirait les lignes du fichier txt puis
2 - dès qu'il detecte le mot " Time Step " il copirait dans excel
3 - jusqu'au mot Part 1
puis loop --> jusqu'a la fin du fichier de 12 Mo
Pourriez vous m'aider à faire une telle macro simpliste ou
m'indiquer un poste ou je pourrai trouver des elements de reponse.
Je vous en remercie d'avance.
Salut le forum
Pour lancer le débat...
L'exemple ci dessous t'écrira le fichier txt dans la feuille actif.
Cette ligne est à adapter
Open "d:\forum\exe_light.txt" For Input As #1
Sub OuvertureFichier()
Dim Val_Ligne As String
Dim Compteur As Long
On Error GoTo Ferme
Open "d:\forum\exe_light.txt" For Input As #1
Compteur = 0
Do While Not EOF(1)
Line Input #1, Val_Ligne
ActiveSheet.Range("A1").Offset(Compteur, 0).Value = Val_Ligne
Compteur = Compteur + 1
Loop
Ferme:
Close #1
End SubMytå
Bonjour,
Pour commencer, merci Myta pour ton acceuil
ainsi que pour ta reponse très... matinale
En effet, grace à ton ebauche j'arrive à copier tout le contenu de mon txt dans une feuille excel,
Je vais travailler à present sur les conditions de bouclage:
je copie entre tel et tel mot
puis entre tel et tel mot je ne copie pas.
J'ai neanmoins qq question sur tes lignes de code Myta (c'est juste pour comprendre et pouvoir le faire par moiu même par la suite):
1- tu ecris:
Do While Not EOF(1) --> quel est le role du (1)?
2- y a t'il moyen de voir les lignes de cde de la routine automatique excel qui permet d'importer un fichier txt
notament l'option de se servir de l'espace comme critère de copie dans une nouvelle colonne.
Histoire de m'en inspirer
3- Comment demander à Excel de reconnaitre il une chaine de caratère:
exemple
si je tappe: Do While Not Val_line = " Part 1"
faut il placer la chaine de caratère à reconnaitre (ici :[espace][espace]Part 1) entre des " " ou des ' ' ou des ( ) peut etre encore des [ ]
En fait j'ai plein plein de question mais avant de trop te et vous saouler je vais chercher par moi meme(en plus c'est plus gratifiant en cas de succes)
Encore merci pour ce power start, j'y retourne pour travailler la question.
-- 19 Déc 2009, 00:39 --
Hello à tous
Bon grace aux supers conseils de Myta j'ai pondu qq chose de pas trop mal:
Le principe:
Je lis la ligne N du .TXT
je copie cette ligne du .TXT sous excel à la ligne M
Temps que je ne detecte pas un mot clé ici Part 1
je copie la ligne n+1 du .txt à la ligne m+1 d'Excel
si je detecte le mot Part 1
alors je continue de lire la ligne n+1 du .txt
mais sans la copier dans Excel
et ceux durant une boucle dont je definis manuellement la taille
voila la macro:
Sub OuvertureFichier()
Dim Val_Ligne As String
Dim CompteurCopy As Long
Dim TailleBoucle As Long
Dim Decompte As Long
On Error GoTo Ferme
Open "C:\compo_J5_init_29-150.txt" For Input As #1
TailleBoucle = 4320
Decompte = TailleBoucle
CompteurCopy = 1
Do While Not EOF(1)
Line Input #1, Val_Ligne
If Val_Ligne = " Part 1 " Then
Do While Not Decompte = 0
Decompte = Decompte - 1
CompteurDoc = CompteurDoc + 1
Line Input #1, Val_Ligne
Loop
Decompte = TailleBoucle
Else:
ActiveSheet.Range("A1").Offset(CompteurCopy, 1).Value = Val_Ligne
CompteurCopy = CompteurCopy + 1
End If
Loop
Ferme:
Close #1
End SubPb et questions
1 - question (issue du poste precedent)
dans la cde Do While Not EOF(1) --> quel est le role du (1)?
2- question
comment demander à Excel de prendre les espaces comme indicateur de changement de colonne
merci pour vos reponses.
Bonjour le forum
Bon ca y est j'ai enfin accouché de la version finale de mes lignes de cde.
Pour faire avancer le schmil-blik et pour les novices qui comme moi était temporairement désemparé au début, voici la version finale avec qq commentaires .
Sub OuvertureFichier()
Dim Val_Ligne As String
Dim CompteurDoc As Long
Dim CompteurCopy As Long
Dim TailleBoucle As Long
Dim Decompte As Long
Dim texte() As String
Dim i As Integer
Dim j As Integer
On Error GoTo Ferme
Open "C:\compo_J5_init_full.txt" For Input As #1
TailleBoucle = 11579 'defini le nb de ligne à suprimer --> à modifier en fct du fichier result
Decompte = TailleBoucle
CompteurDoc = 1
CompteurCopy = 1
Do While Not EOF(1)
Line Input #1, Val_Ligne
' boucle de supression des lignes de definition de la géometrie
If Val_Ligne = " Part 1 " Then
Do While Not Decompte = 0
Decompte = Decompte - 1
CompteurDoc = CompteurDoc + 1
Line Input #1, Val_Ligne
Loop
Else:
'option permet de suprimer les lignes vides entre chaque pas de calcul Pth
'If Len(Val_Ligne) = 0 Then GoTo Suite
'Splitage de la partie à garder en 1 mot = une case
texte = Split(Val_Ligne)
i = 0
j = 0
For i = 1 To UBound(texte)
'supression des espaces pour ne pas avoir de cases vides
If texte(i) = "" Then
Else
j = j + 1
Range("A1").Offset(CompteurCopy, j).Value = texte(i)
End If
Next i
CompteurDoc = CompteurDoc + 1
CompteurCopy = CompteurCopy + 1
Decompte = TailleBoucle
Suite:
End If
Loop
Ferme:
Close #1
End SubMerci aux modérateurs et aux habitués de ce forum pour votre initiative de faire vivre ce type de forum
Et merci à Myta pour ton aide précieuse pour démarrer c’est souvent le plus dur et pour tes précédentes réponses à d’autre postes dont je me suis inspiré.
Joyeuses fêtes le forum.