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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 25.01.2018, 14:09   #1
Алексей0001
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 39
По умолчанию Не стабильно работает программ

Добрый день, помогите разобраться
1.PNG

2.PNG

3.PNG
Кнопка "Open" разбивает файл по строкам и столбцам + сортируем
"Process" разбивает файл по строкам и столбцам, и сортируем уже в файле
Если сразу нажать на кнопку Process, программа будет добавлять весь в файл в один столбец. Если нажать кнопку Open а потом кнопку Process, файл нормально добавится.
Код:
procedure Tstringfile.Button_OpenClick(Sender: TObject);
var
  pl, tl: TStringList;
  i: Integer;
begin
  if (main.delimiter.Text <> '') then // проверяем edit на пустоту
    v := main.delimiter.Text[1]
  else
    v := #9;
  if not OpenDialog1.Execute then
    exit;
  pl := TStringList.Create;
  pl.LoadFromFile(OpenDialog1.FileName); // открыаем файл
  StringGrid1.FixedCols := 0; // подготовливаем StringGrid1
  StringGrid1.FixedRows := 0;
  StringGrid1.RowCount := pl.Count;
  pl.Sort; // сортируем файл
  // разбиваем по строкам  и столбцам разделенных переменной  v
  tl := TStringList.Create;
  tl.delimiter := v;
  try
    for i := 0 to pl.Count - 1 do
    begin
      tl.Clear;
      tl.DelimitedText := pl.Strings[i];
      if StringGrid1.ColCount < tl.Count then
        StringGrid1.ColCount := tl.Count;
      StringGrid1.Rows[i].Assign(tl);
    end;
  finally
    FreeAndNil(tl);
    FreeAndNil(pl); // очищаем память
  end;

end;

procedure Tstringfile.Button_ProcessClick(Sender: TObject);
var
  ListFromFile, ListTemp, list: TStringList;
  i: Integer;
  fname: string;
begin
  if not OpenDialog1.Execute then
    exit;
  ListFromFile := TStringList.Create;
  ListFromFile.LoadFromFile(OpenDialog1.FileName); // загружаем файл
  StringGrid1.FixedCols := 0; // подготовливаем StringGrid1
  StringGrid1.FixedRows := 0;
  StringGrid1.RowCount := ListFromFile.Count;
  list := ListFromFile; // присваиваем list, ListFromFile. list будем использовать для сортировки файла
  fname := ChangeFileExt(OpenDialog1.FileName, '.result'); // переменной fname присваиваем исходный путь с исходным именем файла и расширением result
  // разбиваем по строкам  и столбцам разделенных переменной  v
  ListTemp := TStringList.Create;
  ListTemp.delimiter := v;
  for i := 0 to ListFromFile.Count - 1 do
  begin
    ListTemp.Clear;
    ListTemp.DelimitedText := ListFromFile.Strings[i];
    if StringGrid1.ColCount < ListTemp.Count then
      StringGrid1.ColCount := ListTemp.Count;
    StringGrid1.Rows[i].Assign(ListTemp);
  end;
  try
    list.Sort; // сортируем файл
    // сохранем файл
    if not FileExists(fname) then
      ListFromFile.SaveToFile(fname)
    else if (MessageBox(Handle,
        'Обработанный файл с таким именем уже существует.'#13'Вы хотите сохранить файл под другим именем?', 'Запрос.', mb_YesNo or mb_IconQuestion) = idNo) or (not SaveDialog1.Execute) then
    begin
      ShowMessage('Операция отменена. Файл не сохранен!');
      exit;
    end
    else
      // сохраняем файл с новым именем
      ListFromFile.SaveToFile(SaveDialog1.FileName);
    ShowMessage('Сохранение выполнено успешно!');
  finally
    FreeAndNil(ListFromFile);
    FreeAndNil(ListTemp); // очищаем память
  end;
end;
procedure Tstringfile.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  main.Close;       //закрываем форму
end;

end.
Алексей0001 вне форума
Старый 25.01.2018, 14:11   #2
Алексей0001
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 39
По умолчанию

Если не менять разделитель данных, а оставить стандартный (#9),то программа будет работать нормально
Алексей0001 вне форума
Старый 25.01.2018, 14:35   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Эта тема чем не устроила?

http://www.programmersforum.ru/showt...69#post1719269

И посмотри где записываешь в переменную v
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Закрытая тема


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходимо спланировать выполнение 2n программ на n процессорах так, чтобы время завершения выполнения всех программ был Shved2298 Общие вопросы C/C++ 0 01.12.2017 21:33
Контроль программ (программы ограничивающие действия других программ) Bluezood Безопасность, Шифрование 3 16.01.2016 22:30
не работает relese версия проги и debug работает тока на моем компе D][mon C# (си шарп) 2 04.05.2012 20:21
Загрузка программ из др. программ в АСМе Shacal Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 05.02.2007 08:53