Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DOS-кие файлы и БД [D6]


Kalishenko Stas ©   (2003-02-20 16:36:00) 

Такая задача: есть досовский текстовый файл, в котором есть информация по разным людям, т.е. имеет вид примерно такой:

Мартюк Юрий Васильевич - классный программист

________________________________________________
Доход \ Неизвестно
________________________________________________

Семейное положение - женат
Хобби - программирование

и т.д.
Потом идет следующий чувак, и так до бесконечности.

Так вот задача и состоит в вытягивании необходимой информации по конкретному человеку (под Виндой).

Помогите советом, как это реализовать.


mfender   (2003-02-21 01:18:00) [1]

Насчет кодировок. Очень легко подменить символ CP688 на символ 1251. Пишется в четыре строки хвункция, возвращающая результ в нужное место. Таблица символов занимает немного больше места.

А вот что касается конвертации в удобоваримый вид - это вопрос. Раз вы работаете с энтими файлАми, вам и карты в руки. Руками делаете, значит, пардон, алгоритмизируете сей процесс. Если есть система, как разделены "поля", значить и конвертер написать можно. Неважно, чем они разделяются и в какой последовательности. Главное - была бы система. Конечно, если в одной строке, к примеру, поле имени с полем фамилии разделены @, а в следующей строке |, о каком преобразовании может идти речь? Гораздо проще печатную книгу проиндексировать....


Tux   (2003-02-20 20:41:00) [2]

Необходим язык, позволяющий вольно обращаться со входными данными, прекрасно работающий с текстом и позволяющий решать неформальные задачи анализа + поддержка регулярных выражений. В итоге задача решается за полчаса. Если объем данных невелик, имеет смысл посадить тетю. Если от полмега - Perl, Awk, Python, Tcl - на выбор.


kalishenko stas   (2003-02-20 18:33:00) [3]

>>А удалить пробелы слабо?
Что, во всем документе?

>>А фиксированой длины?
Пробовал. Все равно.


Соловьев   (2003-02-20 18:22:00) [4]

А фиксированой длины? А удалить пробелы слабо?


kalishenko stas   (2003-02-20 18:19:00) [5]

Дело в том, что разделителей как таковых в документе нет, поэтому строки и посмещало.


Соловьев   (2003-02-20 18:00:00) [6]

Как посмещало? Там настроеки при конвертации...Поиграй с ними...
Попробуй через Access. Или ручками...


kalishenko stas   (2003-02-20 17:57:00) [7]

>>MsGuns
В смысле приводит в "стройный вид"? Это что же, каждый документ?

В Экселе у меня посмещало многие строки, так что способ как-то не очень. Или действительно все текстовики ручками переделывать, а потом уже работать с ними?


MsGuns   (2003-02-20 17:36:00) [8]

>Соловьев © (20.02.03 17:19)
>открой в Ексле и там посмотри.

Совершенно в дырочку ! Мы именно так и делали. А потом сажается тетя и по указанному нами шаблону все это хозяйство приводит в "стройный" вид. После чего уже из экселя экспорт куда надо.


Соловьев   (2003-02-20 17:19:00) [9]

открой в Ексле и там посмотри.


Kalishenko Stas   (2003-02-20 17:03:00) [10]

Каким образом анализировать? У меня идея в следующем: загнать в базу построчно, и тогда уже че-то анализировать. Но на первом этапе главная проблема в кодировке. Как файл из досовской кодировки преобразовать в виндовскую? У меня есть прога, делающая это плохо - знаки "_" или "-" преобразует в "д" или вообще игнорирует. Кроме того делает смещения строк при преобразовании. Можете че-нибудь посоветовать?


Chris   (2003-02-20 17:01:00) [11]

Для начала было бы неплохо, если "чуваки" отделялись друг от друга какой-либо специфической строкой, пусть это будет строка "@@@"

FlagRead: boolean;
ListChuvak: TStringList;
f: TextFile;

ListChuvak:=TStringList.Create;
AssignFile(f,"Text.txt");
Reset(f);
FlagRead:=False;
While not EOF(f) do
begin
ReadLn(f,s);
if FlagRead then
begin
if s="@@@" then
Break;
ListChuvak.Add(s);
end
else if pos(AnsiLowerCase(Chuvak),AnsiLowerCase(s))>0 then
begin
ListChuvak.Add(s);
FlagRead:=True;
end;
end;
CloseFile(f);


Соловьев   (2003-02-20 16:37:00) [12]

Самому анализировать файл и вытягивать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо