Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];

Вниз

Кк из большого текстового файла удалять символы по особым ...   Найти похожие ветки 

 
IronHawk   (2003-05-05 17:24) [0]

... условиям, например нужно удалить все символы находящиеся между "!" и "№" при этом сами "!" и "№" заменить на % и & соответственно?
... заранее благодарен!


 
MBo   (2003-05-05 17:26) [1]


procedure CutBetween(const OldName, NewName: string;
CutStart, CutEnd, NewStart, NewEnd: Char);
var
HFile: THandle;
HMap: THandle;
PView: PByteArray;
Size, NewSize: Integer;
i: integer;
Flag: Boolean;
NewArr: array of byte;
BBegin, BEnd, NBegin, NEnd: Byte;
begin
NewSize := 0;
BBegin := Ord(CutStart);
BEnd := Ord(CutEnd);
NBegin := Ord(NewStart);
NEnd := Ord(NewEnd);
HFile := FileOpen(OldName, fmOpenRead);
if HFIle <> INVALID_HANDLE_VALUE then
begin
Size := GetFileSize(HFile, nil);
HMap := CreateFileMapping(HFile, nil, PAGE_READONLY, 0, 0, nil);
if HMap > 0 then
begin
PView := MapViewOfFile(HMap, FILE_MAP_READ, 0, 0, Size);
if PView <> nil then
begin
Flag := True;
SetLength(NewArr, Size);
for i := 0 to Size - 1 do
begin
if Flag then
begin
if PView[i] = BBegin then
begin
NewArr[NewSize] := NBegin;
inc(NewSize);
Flag := False;
end
else
begin
NewArr[NewSize] := PView[i];
inc(NewSize);
end;
end
else
begin
if PView[i] = BEnd then
begin
NewArr[NewSize] := NEnd;
inc(NewSize);
Flag := True;
end;
end;
end;
UnMapViewOfFile(PView);
end;
CloseHandle(HMap);
end;
FileClose(HFile);
end;
if NewSize > 0 then
begin
HFile := FileCreate(NewName);
if HFile <> INVALID_HANDLE_VALUE then
begin
FileWrite(HFile, NewArr[0], NewSize);
FileClose(HFile);
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
CutBetween("e:\qaz.txt","e:\qaz.new","a","b","A","B");
end;



 
Mikhail   (2003-05-05 17:55) [2]

Разнца во времени :)))


 
IronHawk   (2003-05-05 18:04) [3]


> Mikhail © (05.05.03 17:55)

На то он и МАСТЕР!


 
IronHawk   (2003-05-05 18:16) [4]


> MBo © (05.05.03 17:26)

Супер просто, слов нету, ОТЛИЧНО!
ОГРОМАДНЕЙШЕЕ СПАСИБО!


 
IronHawk   (2003-05-06 12:10) [5]


> MBo © (05.05.03 17:26)

Но я упусти один момент, если стоит ! и № то всё отлично, а чтоб руками потом не удалять "" которые по краям ! и № как бы так и их тоже заменять?
Тоесть "!" = % и "№" = &



 
Digitman   (2003-05-06 12:16) [6]

классика !!! "дай г., дай ложку" !)))


 
MBo   (2003-05-06 13:07) [7]

Добавь в нужных местах IF-блока доп. проверки и преобразования.


 
IronHawk   (2003-05-06 15:41) [8]


> Digitman © (06.05.03 12:16)

Ай-ай-ай...

> MBo © (06.05.03 13:07)

А я пробую с приведением топов и Ord-ом...



 
MBo   (2003-05-06 18:28) [9]

новые строки должны быть не длиннее старых (это может сказаться в начале файла). Пишет в то же имя.


procedure CutBetweenInPlaceStr(const FileName,
CutStart, CutEnd, NewStart, NewEnd: string);
var
HFile: THandle;
HMap: THandle;
PView: PChar;
Size: Integer;
POld, PNew, PStart, PEnd: PChar;
LStart, LEnd, LNStart, LNEnd, DiffLen: Integer;
begin
LStart := Length(CutStart);
LEnd := Length(CutEnd);
LNStart := Length(NewStart);
LNEnd := Length(NewEnd);
HFile := FileOpen(FileName, fmOpenReadWrite);
if HFIle <> INVALID_HANDLE_VALUE then
begin
Size := GetFileSize(HFile, nil);
DiffLen := Size;
HMap := CreateFileMapping(HFile, nil, PAGE_READWRITE, 0, 0, nil);
if HMap > 0 then
begin
PView := MapViewOfFile(HMap, FILE_MAP_ALL_ACCESS, 0, 0, Size);
if PView <> nil then
begin
PEnd := AnsiStrPos(PView, PChar(CutEnd));
PStart := AnsiStrPos(PView, PChar(CutStart));
if (PEnd <> nil) and (Dword(PEnd) < DWord(PStart)) then
begin
POld := PEnd;
PNew := PEnd;
Move(NewEnd[1], PNew^, LNEnd);
Inc(POld, LEnd);
Inc(PNew, LNEnd);
end
else
begin
POld := PStart;
PNew := PStart;
end;
while PStart <> nil do
begin
DiffLen := PStart - POld;
Move(POld^, PNew^, DiffLen);
Inc(POld, DiffLen);
Inc(PNew, DiffLen);
Move(NewStart[1], PNew^, LNStart);
Inc(POld, LStart);
Inc(PNew, LNStart);
PEnd := AnsiStrPos(POld, PChar(CutEnd));
if PEnd <> nil then
begin
Move(NewEnd[1], PNew^, LNEnd);
POld := PEnd;
Inc(POld, LEnd);
Inc(PNew, LNEnd);
end;
PStart := AnsiStrPos(POld, PChar(CutStart));
end;
DiffLen := Size - (POld - PView);
Move(POld^, PNew^, DiffLen);
DiffLen := (PNew - PView) + DiffLen;
UnMapViewOfFile(PView);
end;
CloseHandle(HMap);
end;
SetFilePointer(HFile, DiffLen, nil, FILE_BEGIN);
SetEndOfFile(HFile);
FileClose(HFile);
end;
end;



 
IronHawk   (2003-05-06 19:10) [10]

А потом:

> procedure TForm1.Button1Click(Sender: TObject);
> begin
> CutBetween("e:\export.txt","a","b","A","B");
> end;
?
Так оно чёт не арбайтен 8-(


 
MBo   (2003-05-07 05:14) [11]

а потом
CutBetweenInPlaceStr("e:\qaz.zzz", "a", "b", "A", "B");
из
ba1a23b456a789b123
делает
BAB456AB123


 
IronHawk   (2003-05-07 11:11) [12]


> MBo © (07.05.03 05:14)

У меня не делает!
Ничего, пусто, файл вообще не меняеться!



 
MBo   (2003-05-07 12:55) [13]

приведи кусочек файла и как вызываешь


 
Radionov Alexey   (2003-05-07 13:46) [14]

>MBo © (07.05.03 12:55)
Борис, ты попал :)


 
IronHawk   (2003-05-07 14:33) [15]

Лумси-2"!"Луганск"!"91016, ул. Демехина, 31, кв. 19"!"(0642) 34-4300, 34-4107, 34-4104"!"Факс: 34-4300"!"WWW: http://www.lumsi.com.ua"!"E-mail: info@lumsi.com.ua"!"Дата основания: 1996"!"" "Основные виды деятельности: Торговля оптом Торговля в розницу Производство ПК Проектирование и монтаж ЛВС Проектирование и монтаж структурированных кабельных систем (СКС) Производство серверов Занимается продажей и сервисным обслуживанием техники Minolta, продажей расходных материалов к Minolta. ООО ЛУМСИ-2 является представителем фирмы Квазар Микро , занимается продажей компьютеров, мониторов, ноутбуков. ООО ЛУМСИ-2 занимается поставкой и сопровождением автоматизированной системы Нормативные акты Украины.; ООО ЛУМСИ-2 является дилером Минолта Украина.""!"Официальные соглашения с вендорами: Расходные материалы для копировальных аппаратов Минолта Украина Дилер Расходные материалы для принтеров Минолта Украина Дилер Факс-аппараты Минолта Украина Дилер Принтеры Минолта Украина Дилер Копировальные аппараты Минолта Украина Дилер Проекционное оборудование Литер Дилер ПК Квазар-Микро Дилер Серверы Квазар-Микро Дилер Ноутбуки Квазар-Микро Дилер "!"Основные виды деятельности: Торговля в розницу Ремонт офисной техники Организация on-line доступа в Internet (Internet-провайдинг) Проектирование и монтаж ЛВС Покупка/продажа техники б/у Копи-центр Печать изображений большого формата "!""!""!""!""!""!""!""!""!"
Восьмий кол_р"!"Киев"!"б-р Шевченка, 36-Б"!"(044) 235-4895, 235-1443, 235-5600"!"Факс: 235-1443"!"WWW: http://www.viiik.kiev.ua"!"E-mail: viiikolir1@kv.ukrtel.net"!"Дата основания: 1987"!"" "Основные виды деятельности: Печать изображений большого формата Рекламное или PR-агентство Из наших заказчиков: Орлан , Галактон , Национальная лотерея , Пфайзер , Эванс , Артемида.; г. Разработка оригинал-макетов для пищевого направления: этикетка, упаковка, плакаты, буклеты. Из наших работ: Казенка , Крепков , Золотой цитрус , Бар-Нет.""!"Основные виды деятельности: "!""!""!""!""!""!""!""!""!""!"
Казка"!"Киев"!"ул. Михайловская, 1/3, г. Козацький , магазин Казка"!"(044) 228-0361, 229-8095"!"Факс: 490-7016"!"WWW: http://www.test-98.com/kazka.htm"!"E-mail: shop@test-98.com"!"Дата основания: 1998"!"" "Основные виды деятельности: Торговля в розницу Торговля через магазин Производство ПК Проектирование и монтаж ЛВС Копи-центр Запись и тиражирование CD-ROM Установка и сопровождение ПО Открыт в 1999 году. Основными направлениями деятельности является розничная торговля ноутбуками, компьютерной техникой, комплектующими, периферией и акссесуарами. Наша компания предлагает в широком ассортименте портативную технику и карманные компьютеры производства TOSHIBA, COMPAQ, FUJITSU-SIEMENS, HEWLETT-PACKARD, SONY и IBM. Теперь в наших салонах представлены не только ноутбуки всех модификаций, но и карманные ПК, а также DeskTop и SlimTop компьютеры Brandname. Специально подготовленные продавцы-консультанты помогут Вам выбрать наиболее подходящую по стоимости и функциональности модель ноутбука или карманного ПК, а также проконсультируют об особенностях модельных рядов того или иного производителя. Кроме того в наших розничных отделах Вы можете приобрести любой товар, доступный в данный момент на компьютерном рынке г. Киев а. Принцип работы наших отделов основывается на гибкой схеме заказов, с последующей доставкой (если Вы не в состоянии увезти товар самостоятельно). Срок поставки от 2-х часов (комплектующие) до 24-х часов (собранные компьютеры). Причем доставка компьютеров в пределах города бесплатна. Адрес магазина: ул. Михайловская, 1/3, г. Козацький , магазин Казка.; Розничный отдел компании Тест-98.""!"Официальные соглашения с вендорами: Ноутбуки Hewlett-Packard Reseller Факс-аппараты Панасоник СНГ Reseller Мини-АТС Панасоник СНГ Reseller Телефоны, радиотелефоны, автоответчики Панасоник СНГ Reseller Ноутбуки Compaq Computer Reseller Компьютеры Apple Apple Reseller Ноутбуки Toshiba Reseller ПК Тест-98 Reseller Ноутбуки Fujitsu Siemens Computers Reseller Расходные материалы для принтеров InkTec Reseller Ноутбуки Apple Reseller Ноутбуки MaxSelect Reseller Ноутбуки IBM Reseller "!""!""!""!""!""!""!""!""!""!"


 
IronHawk   (2003-05-07 14:34) [16]


> Radionov Alexey © (07.05.03 13:46)

Попали все, и давно, с моим приходом на этот форум! :-)))
А вообще тут есть люди которые никогда не попадают!!!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.012 c
1-59703
Суперчайник
2003-05-08 01:51
2003.05.19
Проблема со строками


6-59820
ИгорьОК
2003-03-20 03:07
2003.05.19
Net send


1-59784
oleg_sys
2003-05-06 21:51
2003.05.19
Вывод графики в файл


3-59551
Dimaz-z
2003-04-25 21:20
2003.05.19
Как скопировать записи из одной базы данных в другую?


8-59807
Rom@n
2003-02-08 08:26
2003.05.19
Мультимедиа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский