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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2018, 19:59   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А тип какой у этой v и как в неё присваиваешь?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.01.2018, 20:01   #12
Алексей0001
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А тип какой у этой v и как в неё присваиваешь?
тип
Код:
  v: char;
присваивание
Код:
v := form1.Edit1.Text[1];
Алексей0001 вне форума Ответить с цитированием
Старый 24.01.2018, 21:36   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var xListFromFile,xListTemp: TStringList;
    i: Integer;
begin
  //допустим сюда загружен твой файл, у меня просто заполнил строками
  xListFromFile:=TStringList.Create;
  xListFromFile.Add('12^333^124^sdd^AAAAA^~~~~');
  xListFromFile.Add('o12^o333^o124^щsdd^AAAAA^~~~~^ку-ку');
  xListFromFile.Add('1^2');
  xListFromFile.Add('5555');

  //подготовил StringGrid1
  StringGrid1.FixedCols:=0;
  StringGrid1.FixedRows:=0;
  StringGrid1.RowCount:=xListFromFile.Count;

  //теперь разбить по строкам и столбцам разделенных символом ^
  xListTemp:=TStringList.Create;
  xListTemp.Delimiter:='^';
  for i:=0 to xListFromFile.Count-1 do begin
    xListTemp.Clear;
    xListTemp.DelimitedText:=xListFromFile.Strings[i];
    if StringGrid1.ColCount<xListTemp.Count then StringGrid1.ColCount:=xListTemp.Count;
    StringGrid1.Rows[i].Assign(xListTemp);
  end;
  //все

  xListTemp.Free;
  xListFromFile.Free;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.01.2018, 21:52   #14
Алексей0001
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
procedure TForm1.Button1Click(Sender: TObject);
var xListFromFile,xListTemp: TStringList;
    i: Integer;
begin
  //допустим сюда загружен твой файл, у меня просто заполнил строками
  xListFromFile:=TStringList.Create;
  xListFromFile.Add('12^333^124^sdd^AAAAA^~~~~');
  xListFromFile.Add('o12^o333^o124^щsdd^AAAAA^~~~~^ку-ку');
  xListFromFile.Add('1^2');
  xListFromFile.Add('5555');

  //подготовил StringGrid1
  StringGrid1.FixedCols:=0;
  StringGrid1.FixedRows:=0;
  StringGrid1.RowCount:=xListFromFile.Count;

  //теперь разбить по строкам и столбцам разделенных символом ^
  xListTemp:=TStringList.Create;
  xListTemp.Delimiter:='^';
  for i:=0 to xListFromFile.Count-1 do begin
    xListTemp.Clear;
    xListTemp.DelimitedText:=xListFromFile.Strings[i];
    if StringGrid1.ColCount<xListTemp.Count then StringGrid1.ColCount:=xListTemp.Count;
    StringGrid1.Rows[i].Assign(xListTemp);
  end;
  //все

  xListTemp.Free;
  xListFromFile.Free;
end;
у меня задача стоит немного по больше, еще нужно отсортированные данные сохранять в файл, ну при этом чтобы в гриде был первичный вариант файла
Алексей0001 вне форума Ответить с цитированием
Старый 24.01.2018, 22:53   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Из xListTemp перезапись в другой стринглист с сортировкой, потом в Text замена всех переводов строки и курсора на колпачек и запись полученной строки в выходной файл, можно посредством еще одного стринглиста
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.01.2018 в 22:56.
Аватар вне форума Ответить с цитированием
Старый 24.01.2018, 23:06   #16
Алексей0001
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 39
По умолчанию

сделал по вашему коду + моему, вот что получилось
Код:
procedure TForm2.Button1Click(Sender: TObject);
var xListFromFile,xListTemp: TStringList;
    i: Integer;
    fname:string;
begin
    xListFromFile:=TStringList.Create;
  if not OpenDialog1.Execute then
    exit;
  xListFromFile.LoadFromFile(OpenDialog1.FileName);
    StringGrid1.FixedCols:=0;
  StringGrid1.FixedRows:=0;
  StringGrid1.RowCount:=xListFromFile.Count;
  xListFromFile.Sort;
   fName := ChangeFileExt(OpenDialog1.FileName, '.result');
  //теперь разбить по строкам и столбцам разделенных символом ^
  xListTemp:=TStringList.Create;
  xListTemp.Delimiter:='-';
  for i:=0 to xListFromFile.Count-1 do begin
    xListTemp.Clear;
    xListTemp.DelimitedText:=xListFromFile.Strings[i];
    if StringGrid1.ColCount<xListTemp.Count then StringGrid1.ColCount:=xListTemp.Count;
    StringGrid1.Rows[i].Assign(xListTemp);
  end;
  try
    if not FileExists(fName) then // если нет файла, имя которого определено переменной fName
      xListFromFile.SaveToFile(fName) // тогда сохраняем в файл с именем fName
    else if (MessageBox(Handle, // иначе открывается диалоговое окно с предложение записть под другим именем
        'Обработанный файл с таким именем уже существует.'#13'Вы хотите сохранить файл под другим именем?', 'Запрос.', mb_YesNo or mb_IconQuestion) = idNo) or (not SaveDialog1.Execute) then
    begin
      ShowMessage('Операция отменена. Файл не сохранен!'); // в случаем не согласия сохранить файл с другим именем выводим сообщение на экран
      exit; // прерываем выполнение
    end
    else
      xListFromFile.SaveToFile(SaveDialog1.FileName);
    // иначе сохраняем файл с новым именем
    ShowMessage('Сохранение выполнено успешно!');
  finally
    FreeAndNil(xListFromFile);
    FreeAndNil(xListTemp); // освобождаем память
  end;
end;
только как мне сделать чтобы в StrinGrid файл отображался без сортировки, а в файл записывался уже в сортированном виде?
Алексей0001 вне форума Ответить с цитированием
Старый 24.01.2018, 23:43   #17
Алексей0001
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Из xListTemp перезапись в другой стринглист с сортировкой, потом в Text замена всех переводов строки и курсора на колпачек и запись полученной строки в выходной файл, можно посредством еще одного стринглиста
спасибо вам, ваш вариант на много проще чем я использовал
Код:
procedure TForm2.Button1Click(Sender: TObject);
var ListFromFile,ListTemp, list: TStringList;
    i: Integer;
    fname:string;

begin
v := Edit1.Text[1];
    ListFromFile:=TStringList.Create;
  if not OpenDialog1.Execute then
    exit;
  ListFromFile.LoadFromFile(OpenDialog1.FileName);
    StringGrid1.FixedCols:=0;
  StringGrid1.FixedRows:=0;
  StringGrid1.RowCount:=ListFromFile.Count;
  list:=ListFromFile;

   fName := ChangeFileExt(OpenDialog1.FileName, '.result');
  //теперь разбить по строкам и столбцам разделенных символом ^
  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 // если нет файла, имя которого определено переменной fName
      ListFromFile.SaveToFile(fName) // тогда сохраняем в файл с именем 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;
Алексей0001 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с отправкой файла Rockot Работа с сетью в Delphi 3 10.05.2017 18:44
Импорт Большого текстового файла (14 млн. строк) с разбиением strannick Microsoft Office Excel 15 01.02.2014 12:55
Проблемы с прокруткой файла excel звездочка Microsoft Office Excel 7 21.02.2012 20:33
Пересчет с разбиением Avel85 Microsoft Office Excel 7 02.09.2011 13:44
проблемы с открытием файла Sparky Общие вопросы C/C++ 1 09.04.2010 19:46