locked
Построчное чтение из файла и запись в файл. RRS feed

  • Вопрос

  • на C#

    1)Как читать и записывать построчно

    2)Как начать читать или записывать с определённой строки

    3)Как сдвигать строки (т.е. если первая строка "1234" вторая - "567", как сместить "567" на третью не перезаписывая, а во вторую записать, например, "890")

    2 апреля 2013 г. 9:13

Ответы

  • Логично, должно быть вот так:

    await Windows.Storage.FileIO.AppendLinesAsync(File, new string[] {"Мой текст"})

    Или так:

    await Windows.Storage.FileIO.AppendTextAsync(File, ("Мой текст"))

    Но второй вариант на моей интуиции, может я и обманываю.
    2 апреля 2013 г. 13:33
    Отвечающий
  • У вас считывается коллекция строк. Ну и проверяйте ее. Например так:

    var lines = await Windows.Storage.FileIO.ReadLinesAsync(File, a);
    foreach (var line in lines)
    {
        if (line.Contains("искомое слово"))
        {
            // Обработка строки, т.к. в ней искомое слово
            // Если после искомой строки надо прервать цикл,
            // то написать по окончании обработки: break;
        }
    }

    • Помечено в качестве ответа Михан4ик 5 апреля 2013 г. 18:40
    4 апреля 2013 г. 18:43
    Отвечающий
  • Ошибка, видимо, возникает потому, что вы пытаетесь сравнить символ(тип char) со строкой(тип string). Для того, что Вам необходимо обычно используются регулярные выражения.

    var line = "Некоторая строка с (особенным текстом в скобках)...";
    var regex = new Regex(@"\((.+)\)");
    var specialText = regex.Match(line).Groups[1].Value;

    Если же Вам они не знакомы попробуйте изменить следующий код в соответствии с Вашими потребностями:

    var line = "Некоторая строка с (особенным текстом в скобках)...";
    var openIndex = line.IndexOf("(")+1;
    var closeIndex = line.IndexOf(")", openIndex);
    var specialText = line.Substring(openIndex, closeIndex - openIndex);


    • Изменено Varlamov Oleg 8 апреля 2013 г. 17:10 правка синтаксиса
    • Помечено в качестве ответа Михан4ик 10 апреля 2013 г. 14:46
    8 апреля 2013 г. 17:06

Все ответы

  • Добрый день.

    Я надеюсь, что вы правильно выбрали раздел и мы с вами говорим про разработку Store приложений.

    Итак, для работы с файлами служит класс FileIO. Читать построчно, вам скорее всего придется через метод ReadBufferAsync. Определяя что строка кончилась по символам конца строки. Но, работа с файлом подразумевает использование его как объекта данных с последовательным доступом. Например, алгоритм записи с определенной строки.

    1. Открываете исходный файл для чтения (out.txt).

    2. Создаете файл для записи (in.txt)

    3. Построчно копируете данные из out.txt в in.txt пока не скопируете для строки с которой надо вставить данные.

    4. Вставляете данные в in.txt

    5. Докопируете оставшиеся данные из файла out.txt в файл in.txt

    6. Удаляете файл out.txt

    7. Переименовываете файл in.txt в out.txt

    Все. Задача решена.

    Или другой вариант (для небольших файлов).

    Считываете все из файла в память. Правите в памяти вставляя в нужное место нужные данные. Записываете что получилось в тот же файл.

    2 апреля 2013 г. 10:40
    Отвечающий
  • А просто строки дописывать с помощью await Windows.Storage.FileIO.AppendLinesAsync(File, ("Мой текст"))?

    Мне пишет 

    1) Наиболее подходящий перегруженный метод для "Windows.Storage.FileIO.AppendLinesAsync(Windows.Storage.IStorageFile, System.Collections.Generic.IEnumerable<string>)" имеет несколько недопустимых аргументов

    2)Аргумент "2": преобразование типа из "string" в "System.Collections.Generic.IEnumerable<string>" невозможно

    2 апреля 2013 г. 13:02
  • Логично, должно быть вот так:

    await Windows.Storage.FileIO.AppendLinesAsync(File, new string[] {"Мой текст"})

    Или так:

    await Windows.Storage.FileIO.AppendTextAsync(File, ("Мой текст"))

    Но второй вариант на моей интуиции, может я и обманываю.
    2 апреля 2013 г. 13:33
    Отвечающий
  • А читать построчно через 

    await Windows.Storage.FileIO.ReadLinesAsync(File, a);

    Только я не могу понять, он читает только одну строку в переменную А или сразу весь текст из файла?

    4 апреля 2013 г. 15:38
  • Все строки. Вот.

    4 апреля 2013 г. 15:40
    Отвечающий
  • Если он читает все строки, как из них выделить определённую? Просто мне нужно, открыть файл, взять первую строку. Если в ней нет определённого слова, то просмотреть следующую и т.д. до конца.
    4 апреля 2013 г. 17:17
  • У вас считывается коллекция строк. Ну и проверяйте ее. Например так:

    var lines = await Windows.Storage.FileIO.ReadLinesAsync(File, a);
    foreach (var line in lines)
    {
        if (line.Contains("искомое слово"))
        {
            // Обработка строки, т.к. в ней искомое слово
            // Если после искомой строки надо прервать цикл,
            // то написать по окончании обработки: break;
        }
    }

    • Помечено в качестве ответа Михан4ик 5 апреля 2013 г. 18:40
    4 апреля 2013 г. 18:43
    Отвечающий
  • А если в этой строке, нужно прочитать надпись между скобками или пробелами? Я пробовал разбирать строку на массив символов, но выдаёт ошибке при сравнении одного символа из массива с пробелом или другим знаком.
    8 апреля 2013 г. 16:46
  • Ошибка, видимо, возникает потому, что вы пытаетесь сравнить символ(тип char) со строкой(тип string). Для того, что Вам необходимо обычно используются регулярные выражения.

    var line = "Некоторая строка с (особенным текстом в скобках)...";
    var regex = new Regex(@"\((.+)\)");
    var specialText = regex.Match(line).Groups[1].Value;

    Если же Вам они не знакомы попробуйте изменить следующий код в соответствии с Вашими потребностями:

    var line = "Некоторая строка с (особенным текстом в скобках)...";
    var openIndex = line.IndexOf("(")+1;
    var closeIndex = line.IndexOf(")", openIndex);
    var specialText = line.Substring(openIndex, closeIndex - openIndex);


    • Изменено Varlamov Oleg 8 апреля 2013 г. 17:10 правка синтаксиса
    • Помечено в качестве ответа Михан4ик 10 апреля 2013 г. 14:46
    8 апреля 2013 г. 17:06