2009-12-07 5 views
0

Merci d'avance. Ce que j'ai actuellement est une boîte de classialog sélectionnant un dossier de texte. Le contenu du fichier texte ressemblera à example.txt et doit ressembler à output.txt. REMARQUE: la chaîne est CoreDBConnectString= 1 ligne jusqu'au ;Database=Source_DB.C# Lire le fichier et extraire des lignes spécifiques

example.txt 
[Information] 
Date= 
CreatedBy= 
Unique=eqwe-asd-123-as12-3 
CoreDataSource= 
CoreDBConnectString=Provider=SQLOLEDB.1;Server=Server;Integrated Security=SSPI;Database=Source_DB 
NoteDataSource=SQLServer 
NoteDBConnectString=Provider=Provider=SQLOLEDB.1;Server=Server;Integrated Security=SSPI;Database=Source_DB 
CoreDBCaseID=99 
NoteDBCaseID=99 


Output.txt 
Table=99 (Comes from CoreDBCaseID) 
Server=Server (comes from the string CoreDBConnectString=) 
Security=SSPI (comes from the string CoreDBConnectString=) 
Database=Source_DB (comes from the string CoreDBConnectString=)

Répondre

3

Vous pouvez faire quelque chose comme ceci:

// Load the file contents 
string contents = File.ReadAllText("example.txt"); 

// Obtain the data using regular expressions 
string id = string id = Regex.Match(
    contents, 
    @"CoreDBCaseID=(?<id>\d+)").Groups["id"].Value; 

string server = string.Empty; // Add regex here 
string security = string.Empty; // Add regex here 
string database = string.Empty; // Add regex here 

// Save the data in the new format 
string[] data = new string[] { 
    String.Format("Table={0}", id), 
    String.Format("Server={0}", server), 
    String.Format("Security={0}", security), 
    String.Format("Database={0}", database) 
}; 

File.WriteAllLines("output.txt", data); 

Et un moyen rapide d'apprendre les expressions régulières:

Regular Expression Cheat Sheet

Regular-Expressions.info


Vous pouvez utiliser un positive lookahead arrêter le match ing au caractère (;). Quelque chose comme ceci:

@ "sécurité = (? [\ D] +) (? =;)"

+0

Cela fonctionne très bien, je suis très nouveau chez Regex, et j'ai élaboré ce qui suit. string security = Regex.Match (contenu, @ "Security = (? \ D +)"). Groupes ["Security"]. Valeur; Cela signifie ce qui suit: Sécurité = SSPI; Base de données = GSK_DRP_Paxil_SSECase Comment faire pour que le Regex soit coupé à; donc j'obtiendrais la sécurité = SSPI Mais cela a bien fonctionné! –

+0

Consultez ma mise à jour. –

2

C'est un fichier INI, qui est très old school. De nos jours, nous programmons les gens utilisent le XML à la place. Par conséquent, il n'y a pas de support intégré pour les fichiers INI en C#. Vous pouvez P/InvokeGetPrivateProfileString pour lire les données.

Vous pouvez utiliser WritePrivateProfileString pour écrire les nouvelles données si vous ne dérange pas l'en-tête de la section d'information comme ceci:

[Information] 
Table=99 
Server=Server 
Security=SSPI 
Database=Source_DB 

This CodeProject article on INI-file handling with C# peut aider.

+2

Nous utilisons aussi la condescendance et préfèrent omettre la ponctuation. ;) –

+0

Frère ... c'est lundi! 8-) –

+0

Ce n'est vraiment pas un fichier INI. –

0

Ouvrez le fichier et lisez-le sur une ligne à la fois. Vous pouvez utiliser les expressions régulières (cheat sheet) pour rechercher et analyser uniquement le texte que vous recherchez.

Questions connexes