Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.19;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.01 c
7-59965
Andy78
2003-03-21 10:59
2003.05.19
Формат отображения даты


1-59672
Patrick
2003-05-07 10:42
2003.05.19
Кодировка клавиш


14-59895
NetBreaker666
2003-04-29 15:58
2003.05.19
Отрисовка в отдельном потоке.


3-59591
Sirus
2003-04-28 09:01
2003.05.19
Можно ли восставновить удаленную запись Interbase???


3-59620
VoronBor
2003-04-28 02:56
2003.05.19
Paradox таблицы в SQl используя ADO