Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: 2 вопроса по редактированию текста Добавлено: 24.02.07 00:33  

Автор вопроса:  esrip
Приветствую.
С прошедшим защитники!
1 вопрос:
существует текстовый файл в котором присутствует список слов, например:
А
АДУР
АЕ
АЕР
АЖЕ
АЖУР
АЗ
АЗОТ
АИР
АИСТ
АЙ

как из этого списка удалить все слова состоящие из 1 и 2х букв?
2ой вопрос:
как из подобного списка выбрать все слова из, например, 4х букв и записать в отдельный файл?

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 Viper



ICQ: 249094859 

Вопросов: 0
Ответов: 310
 Профиль | | #1 Добавлено: 24.02.07 08:00
1. Прочитать файл
2. Разделить на массив строк
3. Обработать нужным образом
4. Записать файл

З.Ы. Спросить что не получилось из вышепредложенного

Ответить

Номер ответа: 2
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #2
Добавлено: 24.02.07 11:06
Витаскиваеш первує строчку проверяеш ее на "Len"
If len( )=4 then ету строчку переносиш в другой спісок

Ответить

Номер ответа: 3
Автор ответа:
 esrip



Вопросов: 2
Ответов: 6
 Профиль | | #3 Добавлено: 24.02.07 12:40
пасиб, чуть позже попробую, если что не получится напишу.

Ответить

Номер ответа: 4
Автор ответа:
 esrip



Вопросов: 2
Ответов: 6
 Профиль | | #4 Добавлено: 24.02.07 15:00
вот к примеру пишу:
            
  Dim dic_r As System.IO.StreamReader
        Dim line As String
        dic_r = My.Computer.FileSystem.OpenTextFileReader("F:\FileList.txt", System.Text.Encoding.Default)
        line = dic_r.ReadLine
If Len(line) = 1 Then
                My.Computer.FileSystem.WriteAllText("F:\FileList4L.txt", UCase(line), True)
            End If

как теперь сделать чтобы операция повторилась на следующей строкой и т.д.

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 24.02.07 17:30
Для этого тебе нужно использовать цикл и метод, определяющий, достигнут ли конец файла.

Ответить

Номер ответа: 6
Автор ответа:
 esrip



Вопросов: 2
Ответов: 6
 Профиль | | #6 Добавлено: 24.02.07 19:05
Dim dic_r As System.IO.StreamReader
        Dim dic_w As System.IO.StreamWriter
        Dim line As String
        Dim i As Integer
        Dim dicall As New ArrayList
        Dim j As Integer
        dic_r = My.Computer.FileSystem.OpenTextFileReader("F:\tst\FileList.txt", System.Text.Encoding.Default)
        line = dic_r.ReadLine
        For i = 0 To dicall.Count + j ' j - количество              
строк
            dicall.Add(line)
            line = dic_r.ReadLine
            Label1.Text = line
            If Len(line) = 1 Then
                dic_w = My.Computer.FileSystem.OpenTextFileWriter("F:\tst\FileList1L.txt", True)
                dic_w.WriteLine(line)
                dic_w.Close()
            ElseIf Len(line) = 2 Then
                dic_w = My.Computer.FileSystem.OpenTextFileWriter("F:\tst\FileList2L.txt", True)
                dic_w.WriteLine(line)
                dic_w.Close()
            ElseIf Len(line) > 3 Then
                dic_w = My.Computer.FileSystem.OpenTextFileWriter("F:\tst\FileList3L.txt", True)
                dic_w.WriteLine(line)
                dic_w.Close()
         'здесь еще большой кусок кода для разного
'количества букв в слове
            End If
        Next

Вопрос: как найти количество строк?

Ответить

Номер ответа: 7
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #7 Добавлено: 25.02.07 01:27
Вопрос: как найти количество строк?

Элементарно! Для этого надо считать все строки и изнать их количество.. В этой ситуации лучше всего воспользоваться методом ReadAllLines который возвращает массив строк, у которого, соотвественное, есть свойство Count... вот и всех делов.. а дальше уже дело техники..
Либо второй вариант.. Читать все строки сразу и перебирать массив в цикле вида For Each... в таком случае количество строк знать и вовсе необязательно..

Ответить

Номер ответа: 8
Автор ответа:
 esrip



Вопросов: 2
Ответов: 6
 Профиль | | #8 Добавлено: 25.02.07 18:25
А можно ли оптимизировать код, а то много времени занимает его выполнение?

Ответить

Номер ответа: 9
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #9 Добавлено: 25.02.07 23:53
Конечно можно... писать каждую строку в отдельности на диск это не совсем корректно и расточительно. Было бы лучше и на порядок быстрее использовать массивы. Другими словами необходимо раскидать исходный массив строк по разным массивам.. 1-массив слова из одной бкувы, второй из 2 букв и т.д.. И после всего этого одним махом скинуть результирующие массивы на винт..

Ответить

Номер ответа: 10
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 26.02.07 00:16
2 esrip
Общая идея верна, но цикл составлен неверно.

Чтоб перебрать все стркои в файле, нужно использовать цикл, подобный следующему:

Dim Line as String
Line = dic_r.ReadLine

Do While Line IsNot Nothing
    [Обрабатываешь строку]
    Line = dic_r.ReadLine
Loop

Чтоб посчитать количество, нужно дополнительно в каждой итерации увеличивать счетчик строк на единицу.

Оптимизация кода...
Во-первых, зачем ты используешь здесь ArrayList? Абсолютно бесполнезный класс в твоем случае как я вижу.

Во-вторых, зачем для записи отдельной строки ты заново открываешь файловый поток?
Открой все три потока в начале процедуры и в конце закрой.

Больше при поверхностном рассмотрении способов оптимизации не вижу - все-таки есть некоторый потолок, выше которого не прыгнешь, в данном случае это, скорее всего, скорость жесткого диска.

Метод ReadAllLines использовать не советую так как он загрузит содежримое всего файла в память, если он большой то это потребует много ресурсов. Соответствено в твоем методе в памяти находится только текущая строка.
Хотя код, использующий ReadAllLines будет более компактным и наглядным, с этим не могу поспорить.

Ответить

Номер ответа: 11
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #11 Добавлено: 26.02.07 01:15
Метод ReadAllLines использовать не советую так как он загрузит содежримое всего файла в память, если он большой то это потребует много ресурсов

Это смотря что ты называешь большим... Где ты видел текстовые файлы по 50 метров??? а 3-5 метра.. это не принципиально (имхо)..
И потом... с массивами работать будет на порядок быстрее чем по 1 строчке на винт скидывать (имхо)

Ответить

Номер ответа: 12
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #12 Добавлено: 26.02.07 01:26
не факт

Ответить

Номер ответа: 13
Автор ответа:
 esrip



Вопросов: 2
Ответов: 6
 Профиль | | #13 Добавлено: 26.02.07 02:23
спасибо за ответы, завтра попробую

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам