Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2009, 12:56   #1
Nocturnal
 
Регистрация: 08.12.2009
Сообщений: 8
Восклицание Проблема с циклом считывания и записи в Memo.

Доброго времени суток. Встала перед мною так задача... Нужно считать из
текстового фаила(в нем находяться тока числа, определенного количества,
например:"385475891, 519874120, 578356238") все строки, и раскопировать
все строки такое количество раз какое стоит последними 2-я
числами(например:385475891, нужно раскопировать 91 раз), и записать в
другой текстовик. Вот чего я добилься... дальше не получаеться... облазил пол тырнета ничего похожего нет... За раннее
благодарю.
Код:
procedure TForm1.Button4Click(Sender: TObject);
var
last:string;
a,i:integer;

begin
   a:=Memo1.Lines.Count;
   for i:=0 to (a)-1 do
   last:=Copy(IntToStr(a),8,2);
   //memo2.text:=a;
   //Memo2.Lines.Append(IntToStr(StrToInt(Memo1.Lines[i])));
   memo2.Text:=last;
   for i:=2 to StrToIntDef(last,0) do
   Memo1.lines.Add(AdjustLineBreaks(StrToIntDef(Memo1.Lines.Count,0)));
   memo1.lines.SaveToFile('D:\Documents and Settings\Admin\Мои 
документы\Дельфа\2.txt');
   end;

procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.Lines.LoadFromFile('D:\Documents and Settings\Admin\Мои 
документы\Дельфа\1.txt');
end;

Последний раз редактировалось Stilet; 08.12.2009 в 13:26.
Nocturnal вне форума Ответить с цитированием
Старый 08.12.2009, 13:11   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
procedure TForm1.Button4Click(Sender: TObject);
var
a,i,last:integer;

begin
for i:=0 to Memo1.Lines.Count-1 do
last:=StrToInt(Copy(Memo1.Lines[i],8,2));
//memo2.text:=a;
//Memo2.Lines.Append(IntToStr(StrToIn t(Memo1.Lines[i])));
memo2.Text:=last;
for i:=2 to last do
Memo1.lines.Add(AdjustLineBreaks(St rToIntDef(Memo1.Lines.Count,0)));
memo1.lines.SaveToFile('D:\Document s and Settings\Admin\Мои 
документы\Дельфа\2.txt');
end;
SERG1980 вне форума Ответить с цитированием
Старый 08.12.2009, 13:24   #3
Nocturnal
 
Регистрация: 08.12.2009
Сообщений: 8
По умолчанию

Не работает =( таже ошибка: "------Debugger exception Notification-------
Project Project1.exe raised exception class EConvertError with message ''' is not a valid integer value'. Process stopped. Use Step or Run to continue."
Nocturnal вне форума Ответить с цитированием
Старый 08.12.2009, 13:31   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

не стал ваш код переделывать вот мой вариант
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,j,last:integer;
begin
 for i:=0 to Memo1.Lines.Count-1 do
 begin
  last:=StrToInt(Copy(Memo1.Lines[i],8,2));
  for j:=1 to Last do
   memo2.Lines.Add(Memo1.Lines[i]);
 end;
 memo2.Lines.SaveToFile('d:\12.txt');
end;
SERG1980 вне форума Ответить с цитированием
Старый 08.12.2009, 13:36   #5
Nocturnal
 
Регистрация: 08.12.2009
Сообщений: 8
По умолчанию

Тот же результат... ошибка и все тут...
Nocturnal вне форума Ответить с цитированием
Старый 08.12.2009, 13:41   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от Nocturnal Посмотреть сообщение
Тот же результат... ошибка и все тут...
не может быть код рабочий прежде чем выложить проверил сам. Или выложите входной файл который грузиться в мемо1
обратите внимание файл грузится с другого пути
Да кстати вот мой входной файл
Вложения
Тип файла: zip 3.ZIP (224.4 Кб, 7 просмотров)
Тип файла: txt 11.txt (32 байт, 113 просмотров)

Последний раз редактировалось SERG1980; 08.12.2009 в 13:47.
SERG1980 вне форума Ответить с цитированием
Старый 08.12.2009, 13:42   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
for i:=0 to Memo1.Lines.Count-1 do
last:=StrToInt(Copy(Memo1.Lines[i],8,2));
так делать бессмысленно! Зачем перебирать все строки, если интересует только ПОСЛЕДНЯЯ СТРОЧКА!?
достаточно:
Код:
try
   last:=StrToInt(Copy(trim(Memo1.Lines[Memo1.Lines.Count-1]),8,2));
except
   Application.MessageBox(PChar('Невозможно распознать число в последней строчке! '
            +trim(Memo1.Lines[Memo1.Lines.Count-1])), 'Ошибка', MB_ICONERROR or MB_OK);
end;
p.s. и ищите проблемы в Вашем текстовом файле...
скорее всего, там после последней строки есть ещё пустая (или несколько пустых) строк!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.12.2009, 13:50   #8
Nocturnal
 
Регистрация: 08.12.2009
Сообщений: 8
По умолчанию

да спасибо... действительно была пустая строчка... фуф =) Еще раз спасибо!
Nocturnal вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Блок-схема к программе на Паскаль(структура записи, считывания) artemon16 Помощь студентам 1 04.12.2009 13:15
QBasic. Проблема с циклом и погрешностью Clericos Помощь студентам 4 30.11.2009 18:16
Реализация класса с методом поиска записи по файлу (используя компонент Memo) Dem.IG Общие вопросы Delphi 2 05.11.2009 16:02
Adodb+smarty проблема с циклом while Oleg_453 PHP 2 02.12.2008 14:41
Проблема с циклом.. POPOV Помощь студентам 3 29.04.2008 18:36