![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
текстовый файл [D5]
mochoni © (2004-07-09 11:37:00)фсем привет! объясните плиз как реализовать задачу.
Дан текстовый файл в котором определеная структура последовательности символов.Мне необходимо с начала файла после каждого 13 символа | поставить символ ;
Помогите с реализацией
Sergey Kaminski (2004-07-09 20:49:00) [1]А если этих '|' будет в строке точно 13, значит, судя по приведенной строке, эта палочка будет в ней последней. Тогда можно еще ускорить и начать перебор с конца строки до первой "палки".
Sergey Kaminski (2004-07-09 20:46:00) [2]А так побыстрее не будет? ;)
N := 0;
for I := 1 to Length(S) do
begin
if S[I] = '|' then
Inc (N);
if N = 13 then
begin
NewS := Copy (S,1,I) + ';' + Copy (S,I+1,Length(S));
Break
end;
end;
Ega23 (2004-07-09 13:42:00) [3]Зря.
Bill (2004-07-09 13:40:00) [4]угу
Ega23 (2004-07-09 13:37:00) [5]Bill © (09.07.04 13:32) [12]
Ты в этом уверен?
Bill (2004-07-09 13:32:00) [6]to:ssk :) интересный вариант, только параметры цикла считаются перед инициализицией вроде => строка будет пройдена не полностью.
ssk (2004-07-09 13:28:00) [7]вот так тоже можно
procedure SetSymbolAfter13(s: string);
const
AfterSymbol = '|';
InsertSymbol = ';';
var
k, count: integer;
begin
count:=0;
for k:=1 to Length(s) do
begin
if s[k] = AfterSymbol then
Inc(count)
else Continue;
if count=13 then
begin
count:=0;
insert(InsertSymbol, s, k+1);
end;
end;
end;
Bill (2004-07-09 13:13:00) [8]Ну так бы исказал что таблица каждая запись 13 полей )))
надо разделить поля :))
ну все тоже самое
читаеш файл в строку S
b:=0;
for i:=1 to Length(S) do begin
S2:=S2+S[i];
if S[i]='|' then begin
inc(b);//считаем кол-во '|'
if b=13 then begin
b:=0;
S2:=S2+';';
end;
end;
end;
записываеш строку S2 в файл
mochoni (2004-07-09 13:01:00) [9]я просто не коректно произнес условия.Попробую заново.
Имеется строка вида 43frft4tg|"135176000868101"|"ewrfrrtr"|"Т190"||"rtb6ybyt yun"|||"yuyu898h6g67h"|"yuhtyg"|"yuyuhyuh"|1|0|0
в ней 13 знаков (вот таких |).
Вот после этого 13 символа мне нужно поставить знак(вот такой ;)
Bill (2004-07-09 12:33:00) [10]Ну да не прав, заменим S[0] на Length(S)
я тут алгоритм изложил а непрогу написал
Reindeer Moss Eater (2004-07-09 12:28:00) [11]нармальный файл, начиная с 5 Delphi в стору 4 гига закатать можно :)
C пятой говоришь?
Ну да ладно.
А это тогда что такое?
for i:=1 to S[ 0] do begin
Bill (2004-07-09 12:26:00) [12]Нет ну может я и не правильно понял :))
to : Reindeer Moss Eater
нармальный файл, начиная с 5 Delphi в стору 4 гига закатать можно :)
Bill (2004-07-09 12:22:00) [13]копируем все сиволы до знака #13
из одной строки в другую, если втречается #13 то во вторую строку добавляем #13|
ток ошибочка вышла в коде не большая (переполнее не учел :) )
читаеш файл в строку S
b:=1;
for i:=1 to S[0] do begin
if S[i]=#13 then
S2:=S2+S[i]+'|';
else
S2:=S2+S[i];
end;
записываеш строку S2 в файл
ZiRoCool (2004-07-09 12:22:00) [14]хмм, били, ты не правельно задачу понял,там автор говорит что нада после каждого триннадцатого символа "|" поставить символ ";", вроде так
Reindeer Moss Eater (2004-07-09 12:21:00) [15]Билли, что же это за файл, помещающийся в ShortString?
Кроме того точку с запятой просили ставить не после каждого символа #13, а после каждого тринадцатого символа "|"
mochoni (2004-07-09 12:17:00) [16]Плиз! Опишите по падробнее!!
Billi (2004-07-09 11:42:00) [17]читаеш файл в строку S
b:=1;
for i:=1 to S[0] do begin
if S[i]=#13 then begin
S2[b]:=S[i];
inc(b);
S2[b]:='|';
end
else
S2[b]:=S[i];
inc(b);
end;
записываеш строку S2 в файл