Как обновить данные в строке из текстового файла

Простая сортировка по возрастанию очень проста, вызовите функцию sorted (). Он возвращает новый отсортированный список:

>>> sorted([66.25, 333, 333, 1, 1234.5])
[1, 66.25, 333, 333, 1234.5]

sorted () принимает обратный параметр с булевым значением.

>>> sorted([66.25, 333, 333, 1, 1234.5], reverse=True)
[1234.5, 333, 333, 66.25, 1]
-1
задан Michał Turczyn 17 January 2019 в 08:01
поделиться

4 ответа

Вы не совсем нуждаетесь в классе Flds для этой цели. Поскольку поле Done является последней строкой, вы можете проанализировать totalAcc и добавить его в конец строки при анализе файла. Например,

var data = File.ReadAllText(intputFileName);
var list = data.Split(new[]{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries);
StringBuilder strBuilder = new StringBuilder($"{list.First()}{Environment.NewLine}");

foreach(var line in list.Skip(1))
{
        var totalAcc = line.Split(new[]{"|"},StringSplitOptions.RemoveEmptyEntries)[2];
        strBuilder.AppendLine($"{line}{totalAcc}");
}

File.WriteAllText(outputFileName,strBuilder.ToString());

Выход

|Date    |Name  |TotalAcc|Folder|Done
|20190105|LHN888|1       |5     |1       
|20190105|RLM916|2       |5     |2       
|20190105|TDE374|1       |5     |1       
0
ответ дан Anu Viswan 17 January 2019 в 08:01
поделиться

Вот компактный способ сделать это:

static void Main(string[] args)
{
  // Read all lines from file
  var lines = File.ReadAllLines("Path");
  string[] linesToWrite = new string[lines.Length];
  for (int i = 0; i < lines.Length; i++)
  {
    var cells = lines[i].Split('|');
    // Appned value in "TotalAcc" column at the end of current line
    // and store it in array of lines, that will be written to file
    linesToWrite[i] = lines[i] + cells[2];
  }
  File.WriteAllLines("path", linesToWrite);
}
0
ответ дан Michał Turczyn 17 January 2019 в 08:01
поделиться

Это происходит потому, что String.Replace принимает два строковых аргумента: oldValue и newValue. Вы указали newValue 'DT11.TotalAcc', однако пустая строка недопустима для oldValue.

Что вы можете сделать, это после получения DT11.Done, заменить его на некоторое значение tempValue, а затем использовать его для замены новым значением

что-то вроде

while ((line = file11.ReadLine()) != null)
{
    string[] SpltStr11 = line.Split('|');
    Flds DT11     = new Flds();
    DT11.Date     = SpltStr11[0];
    DT11.Name     = SpltStr11[1];
    DT11.TotalAcc = SpltStr11[2];
    DT11.Folder   = SpltStr11[3];
    DT11.Done     = SpltStr11[4];

    if (string.IsNullOrEmpty(DT11.Done))
    {
         DT11.Done = "tempVal";
    }

    ListDT11.Add(DT11);
 }

Таким образом, вы будете не получить ошибку. Остальной код вы можете отформатировать соответственно

0
ответ дан DevDotNet 17 January 2019 в 08:01
поделиться

В настоящее время то, что вы делаете, содержит некоторые ошибки. В нижней строке вы получите ошибку.

text = text.Replace(DT11.Done, DT11.TotalAcc);

Поскольку в файле, который вы указали для столбца , значение «Готово» действительно отсутствует (пустое или пустое), поэтому оно вызывает исключение. Потому что метод Replace принимает первый аргумент и заменяет его значением, указанным в качестве второго аргумента. В случае, если оно пустое или пустое, возникнет исключение

. Поэтому вам нужно изменить код, как показано ниже. Пожалуйста, примите во внимание, что я написал код с использованием вашего класса под названием "Flds" . Я не знаю, почему на самом деле вы используете его. Это может быть удалено в любом случае. Не имеет смысла использовать его в этом процессе

    private static void SyncAndUpdateFileContent(string fileToSync)
    {
        if (!File.Exists(@"C:\Users\" + fileToSync))
        {
            throw new FileNotFoundException($"File {fileToSync} does not exist!");
        }

        var ori_Files11 = @"C:\Users\var\log\test.txt";
        List<Flds> ListDT11 = new List<Flds>();
        string fileHeader = null;
        using (StreamReader file11 = new StreamReader(ori_Files11))
        {
            string line;
            while ((line = file11.ReadLine()) != null)
            {
                //Get file header copy
                if (string.IsNullOrEmpty(fileHeader))
                {
                    fileHeader = line;
                    continue;
                }

                string[] SpltStr11 = line.Split('|');
                Flds DT11 = new Flds
                {
                    Date = SpltStr11[0],
                    Name = SpltStr11[1],
                    TotalAcc = SpltStr11[2],
                    Folder = SpltStr11[3],
                    Done = SpltStr11[4]
                };

                ListDT11.Add(DT11);
            }
        }

        var stringBuilder = new StringBuilder($"{fileHeader}");
        foreach (var listDT11Item in ListDT11.Skip(1))
        {
            stringBuilder.AppendLine($"{listDT11Item.Date}|{listDT11Item.Name}|{listDT11Item.TotalAcc}|{listDT11Item.Folder}|{listDT11Item.TotalAcc}");
        }

        //Just call WriteAllText method at the end
        File.WriteAllText(ori_Files11, stringBuilder.ToString());
    }
0
ответ дан AEMLoviji 17 January 2019 в 08:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: