2009-12-01 6 views
0

J'apprécierais vraiment si quelqu'un pourrait m'aider/offrir des conseils à ce sujet.Le vieux switcheroo (position du commutateur dans le fichier)

J'ai un fichier, probablement d'environ 50000 lignes, ces fichiers sont générés sur une base hebdomadaire. chaque ligne est identique en termes de type de contenu.

fichier original:

address^name^notes 

mais je dois effectuer un interrupteur. Je dois pouvoir changer (sur chaque ligne) l'adresse avec le nom. donc après que l'interrupteur a été fait, les noms seront d'abord, puis les adresses, puis des notes, comme suit:

fichier résultat

:

name^address^notes 
+1

Avez-vous besoin de le faire en place ou serait-il possible que le code crée un 2e fichier pour y placer les lignes commutées? –

+0

de toute façon est bon –

+1

Ce serait vraiment simple à faire avec awk. –

Répondre

4

50.000 est pas beaucoup ces jours-ci, si simple lecture dans le fichier entier et la sortie du format voulu devrait bien fonctionner pour vous:

string[] lines = File.ReadAllLines(fileName); 
string newLine = string.Empty; 

foreach (string line in lines) 
{ 
    string[] items = line.Split(myItemDelimiter); 
    newLine = string.Format("{0},{1},{2}", items[1], items[0], items[2]); 
    // Append to new file here... 
} 
+1

Je recommanderais de ne pas utiliser l'itinéraire ReadAllLines s'il y a une chance de croître ou de réutiliser ce processus, les lignes de 50K peuvent être un cochon de mémoire. La solution de Mick Walker assurera que la mémoire n'est pas nécessairement utilisée. –

+0

Juste commentaire, cela ne sera en effet pas à l'échelle de très gros fichiers, et à cet égard, Mick Walker a une meilleure solution. – Oded

0

Go aller gadget REGEX!

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static string Switcheroo(string input) 
     { 
      return System.Text.RegularExpressions.Regex.Replace 
       (input, 
       @"^([^^]+)\^([^^]+)\^(.+)$", 
       "$2^$1^$3", 
       System.Text.RegularExpressions.RegexOptions.Multiline); 
     } 

     static void Main(string[] args) 
     { 
      string input = "address 1^name 1^notes1\n" + 
        "another address^another name^more notes\n" + 
        "last address^last name^last set of notes"; 

      string output = Switcheroo(input); 
      Console.WriteLine(output); 
      Console.ReadKey(true); 
     } 
    } 
} 
+0

"Allez allez gadget REGEX!" - J'aime l'enthousiasme :) – Basic

+0

lol moi aussi +1. –

4

Que pensez-vous de cela?

StreamWriter sw = new StreamWriter("c:\\output.txt"); 
     StreamReader sr = new StreamReader("c:\\input.txt"); 
     string inputLine = ""; 

     while ((inputLine = sr.ReadLine()) != null) 
     { 
      String[] values = null; 
      values = inputLine.Split('^'); 
      sw.WriteLine("{0}^{1}^{2}", values[1], values[0], values[2]); 
     } 
     sr.Close(); 
     sw.Close(); 
+0

+1 pour avoir lu dans le flux –

Questions connexes