jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 17 nov. 2008 à 10:12
Salut,
ATTENTION dans la déclaration,Dim intFilRead, intFilWrite As Integer
intFilRead n'est pas de type Integer mais Variant.
pour avoir deux integer sur la même ligne
Dim intFilRead As Integer, intFilWrite As Integer
Un peu de couleur
Sub file_transform()
'Variable pour l'attribution du numéro auto pour les ouvertures de nouveaux canaux
'Utilisés lors de la lecture et l'écriture dans des fichiers
Dim intFilRead As Integer
Dim intFilWrite As Integer
'Variable d'accès au fichier
Dim strFic_entree As String
'Variable contenant la ligne du fichier tester
Dim strLine As String
'Chemin pour accéder aux fichiers
strFic_entree = "C:\Documents and Settings\projet\"
On Error Resume Next 'si il a une erreur on continu
'Initialisation des numéros et ouverture du fichier en lecture
intFilRead = FreeFile
Open strFic_entree & "schema.ini" For Input As #intFilRead
'Initialisation des numéros et ouverture du fichier en écriture
intFilWrite = FreeFile
Open strFic_entree & "schema2.ini" For Output As #intFilWrite
'Test sur l'ouverture des fichiers :
If Err.Number <> 0 Then
Call MsgBox(Err.Number & Chr(13) & Err.Description)
Call Err.Clear
End If
'On boucle la lecture du fichier jusqu'à la fin
Do While Not EOF(intFilRead)
Line Input #intFilRead, strLine
'Si la ligne commence par [ alors
If Left(strLine, 1) = "[" Then
'On l'écrit dans le fichier
Print #intFilWrite, strLine
'Sinon si la ligne commence par col alors
ElseIf Left(strLine, 3) = "Col" Then
'On récupère l'élément après le = puis avant " "
strLine = Mid$(strLine, InStr(1, strLine, "=") + 1)
strLine = Mid$(strLine, 1, InStr(1, strLine, " ") - 1)
'On l'écrit dans le fichier
Print #intFilWrite, strLine
'Sinon si la ligne est vide alors
ElseIf strLine = Empty Then
'On l'écrit dans le fichier
Print #intFilWrite, strLine
End If
Loop
'Fermeture des canaux
Close #intFilWrite
Close #intFilRead
End Sub , ----
[../code.aspx?ID=41455 By Renfield]
PS:Si tu estimes que ton problème est résolu,
penses à appuyer sur réponse acceptée sur le OU les posts qui t'ont aider à avancer.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 18 nov. 2008 à 13:11
Re,
"mais c'est juste le numéro d'un canal!" Il prend la valeur d'un Integer en retour de FreeFile mais avant il est déclaré en Variant.
Pour la couleu direct j'utilise l'AddIn de VB6 posté par [../code.aspx?ID=41455 Renfield]
suffit de cliquer sur le lien
@+: Ju£i€n Pensez: Réponse acceptée
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 13 nov. 2008 à 20:35
"....1 = > un libellé dans rien : textdelimited ..."
Ce fichier est correctement construit ( enfin presque, le textdelimiter me pose aussi un problème, normalement ça devrai etre Format=FixedLength ), il ne s'agit pas d'un fichier ini classique.
C'est un fichier Schema, c'est à dire un fichier qui est utiliser pour indiquer le schéma d'une base de donnée, lorsque celle-ci est concrétisée par des fichiers textes.
On peut effectivement très bien utiliser des fichiers textes correctement structuré avec les outils de bases de données comme s'il s'agissait d'une réelle base. Dans ce cas, la base est caractérisée par le dossier contenant les fichiers, les tables étant les fichiers eux-même.
Pour en revenir à la question, extraire le nom des colonnes, oui. Faut en voir l'interet, mais c'est possible. Il faut, comme dit PCPT, lire chaque ligne et en extraire manuellement l'information souhaitée pour en reconstruire, manuellement aussi un autre fichier.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 14 nov. 2008 à 08:41
Salut,
Il y a surement plus simple mais voici une possiblité pour passer
de col1= ID Integer à ID
Dim P As String
P = "col1=ID Integer"
P = Mid$(P, InStr(1, P, "=") + 1)
P = Mid$(P, 1, InStr(1, P, " ") - 1)
Call MsgBox(P), ----
[../code.aspx?ID=41455 By Renfield]
Après suffit de suivre les indications de [../auteur/CASY/333139.aspx casy] et [../auteur/PCPT/401740.aspx PCPT] ('luuut a vous deux)
cs_gglafouine
Messages postés13Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention27 janvier 2010 14 nov. 2008 à 10:10
Bonjour à vous tous et merci de votre aide
la structure du fichier ini source n'est pas à modifier et elle est bonne. Elle permet en effet de définir une structure d'une table mais dans un fichier externe.
>>Format=FixedLength n'est pas conforme pour mon logiciel.
j'ai besoin de créer un fichier temporaire contenant la même chose que le précédent pour définir la liste des titre de champs existant dans chaque fichier et qui sera pré chargé.
Pour l'instant le fichier existe mais dois être rempli à la main (inutile). c'est pour ça que je veux le générer. au lancement de l'application et le détruire à la fin du traitement.
Le but c'est ouvrir mon fichier 1 en lecture
ouvir un fichier 2 en écriture
on boucle la lecture jusqu'a la fin du fichier
si la ligne commence par un [ on écrit la lignesinon si la ligne commence par colon split sur le on prend le deuxième morceau que l'
on re split sur l'espace on récupère le premier morceau
on l'écrit
sinon rien
on ferme l'écriture du fichier 2
on ferme la lecture du fichier 1
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 14 nov. 2008 à 10:21
Salut,
Etant donné que tu as une idée très claire de ce que tu souhaites faire, je pense que tu seras en mesure d'utiliserwww.codyx.orgcorrectement.
Ensuite si tu as un problème sur l'utilisation de tel ou tel code, reviens nous voir.
cs_gglafouine
Messages postés13Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention27 janvier 2010 18 nov. 2008 à 11:36
Salut [auteur/JRIVET/89254.aspx jrivet],
ATTENTION dans la déclaration, Dim intFilRead, intFilWrite As Integer
intFilRead n'est pas de type Integer mais Variant.
A bon ?! mais c'est juste le numéro d'un canal!!! Pourquoi l'un serait de type variant et pas l'autre dans ce cas?
Et comment puis-je mettre le code en couleur directement?