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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2009, 17:30   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Считывание из файла номеров и цифр

Всем еще раз добрый вечер! Вот, занялся я тут одним проектом. Довольно таки сложный. Пишу в одиночку, кроме как у вас ни у кого больше не спрашиваю. Суть задачи: в прикрепленном файле есть девять текстовых документов. В них хранятся числа и буквы. Например, в первом файле четыре числа и у всех одинаковый номер, т.е. 1. Во втором тоже буквы со своим номером, т.е. 2 и т.д. Нужно сделать следующее: на форме есть StringGrid, в котором десять колонок и две строки. В первую строку будет записываться имя, а во второй должны расставляться числа, которые соответствую определенной букве. Например, пусть введено имя "Иван", тогда числа под ним должны стоять такие: 1 3 1 6. То есть для того слова, которое введено по клеткам в верхнюю строку, под ним должны выставляться определенные числа. Слова заранее неизвестны. И вот вопрос: как сделать правильное считывание цифр из файла, чтобы задача была выполнена? Загвоздка в том, что номера то у букв одинаковые. Кто что может предложить? У кого какие идеи? Заранее благодарю за помощь.
Вложения
Тип файла: zip Программа.zip (8.8 Кб, 14 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 21.06.2009 в 17:35.
artemavd вне форума Ответить с цитированием
Старый 22.06.2009, 10:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я никак понять не могу зачем ты разделил все по файлам? Чего просто в массив загнать нельзя? Или в INI файл не запихнуть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2009, 10:48   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Могу и в один файл загнать, но я не знаю как правильно сделать процедуру считывания цифр. Можете помочь?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 22.06.2009, 11:25   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Конечно помогу, только ты напиши четко и подробно что ты хочешь сделать. т.е. я так понял это что-то типа шифра будет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2009, 14:12   #5
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Я все скинул в один файл Chars.txt и по нажатию кнопки написал:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 i, j: integer;
 Chars: TStrings;           //Сам файл будет тут
 Letter, Number: char;   //Буква в StringGrid'е и число в файле
 str: string;                 //Текущая строка в файле
begin
 Chars := TStringList.Create;   //Создаем список
 try
  Chars.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Chars.txt');   //Загружаем в него файл
  for i := 0 to StringGrid1.ColCount - 1 do       //Цикл до кол-ва колонок
  begin
   if StringGrid1.Cells[i, 0] = '' then Break;      //Если в текущей колонке не написана буква, то завершаем цикл

   Letter := StringGrid1.Cells[i, 0][1];           //Присваиваем букву из текущей колонки

   for j := 0 to Chars.Count - 1 do               //Цикл до конца файла
   begin
    str := Chars[j];               //Присваиваем текущую строку
    if Pos(AnsiUpperCase(Letter), str) <> 0 then    //Найдена ли буква (измененная в регистре на заглавную) в текущей строке
    begin
     Number := Copy(str, 1, 1)[1];      //Если найдена, то присваиваем переменной число в текущей строке
     Break;                                     //Заканчиваем цикл
    end;
   end;
   StringGrid1.Cells[i, 1] := Number;   //Присваиваем ячейке пониже буквы число из файла
  end;
 finally
  Chars.Free;     //Освобождаем память от списка
 end;
end;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.

Последний раз редактировалось Neeter; 22.06.2009 в 14:17.
Neeter вне форума Ответить с цитированием
Старый 22.06.2009, 14:53   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Сообщение от Stilet
я так понял это что-то типа шифра будет?
Нет Это будет не шифр. Просто таким образом расчитывается одно значение. Формула работает по такому принципу.
Цитата:
Сообщение от Neeter
Я все скинул в один файл Chars.txt и по нажатию кнопки написал:
А как в Вашем текстовом файле располагаются цифры и буквы? Так?
1 А
1 И
2 Б
3 В
Я попробую Ваш код, но, видите ли, я сделал с Edit-aми, но не так как хотелось бы. То есть в верхний Edit вводится имя, а в Edit по ниже вводится цифры без пробелов. Как можно ваш код переработать под случай использования Edit-a вместо StringGrid-a?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 22.06.2009, 14:58   #7
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Цитата:
А как в Вашем текстовом файле располагаются цифры и буквы? Так?
Да
Вот код с edit'ами:
Код:
procedure TForm1.BitBtn2Click(Sender: TObject);
var
 i, j: integer;
 Chars: TStrings;
 Letter, Number: char;
 str: string;
begin
 Chars := TStringList.Create;
 try
  Chars.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Chars.txt');
  Edit2.Clear;
  for i := 1 to Length(Edit1.Text) do
  begin
   Letter := Edit1.Text[i];

   for j := 0 to Chars.Count - 1 do
   begin
    str := Chars[j];
    if Pos(AnsiUpperCase(Letter), str) <> 0 then
    begin
     Number := Copy(str, 1, 1)[1];
     Break;
    end;
   end;
   Edit2.Text := Edit2.Text + Number;
  end;
 finally
  Chars.Free;
 end;
end;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 22.06.2009, 15:28   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
artemavd
Я бы лучше организовал эти буквы и их номера в некий массив...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2009, 15:37   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Ооооо!!! Как я люблю этот форум! )). Спасибо огромное вам всем . А можно последний вопрос по этой теме? В какое место кода надо записать код, который бы считал сумму полученных чисел и выводил ответ в label? Предполагаю, что код будет примерно такой (если нет, то как правильно?):
Код:
..........

for k:=0 to StringGrid1.ColCount - 1 do
 begin 
 if StringGrid1.Cells[k,StringGrid1.ColCount - 1] <> ' ' then
   begin
    Label1.Caption:=IntToStr(StringGrid1.ColCount - 1);
   end;
 end;
..........
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 22.06.2009, 15:46   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
записать код
На всякий случай оформи его в процедуру. А вызывать ее можно скажем после циклов которые наполняют грид.
Впрочем можно рассчитывать сумму непосредственно при наполнении грида информацией.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ считывание с файла. tsergey Помощь студентам 20 24.04.2010 23:30
Считывание с файла (assembler) Prizrak58 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 30.01.2008 18:40
Считывание из файла DimkinStd Общие вопросы Delphi 7 24.01.2007 19:18
Считывание данных из файла PAVEL315 Общие вопросы Delphi 26 17.12.2006 00:53