Читання, опрацювання та збереження тексту в TListBox





            Зручний контрол для завантаження з файлу чисел, коли кожне з нового рядка. Теж код завантаження записується в один рядок! Але все по порядку.

Задача
            Справність деталі оцінюється по розміру A, який повинен відповідати інтервалy [А-b;А+b]. Визначити в партії із N деталей браковані і справні (вивести результат по кожній деталі), підрахувати їх кількість, а також кількість справних деталей. Встановити відсоток браку.
Вхідні дані:
У файлі detali.in записані розміри деталей, кожна цифра з нового рядка. У першому рядку файлу записано A. Другий рядок містить менший допуск -b. третій - більший допуск +b.
Вихідні дані:
У файлі analiz.out записати: кількість деталей, кількість справних деталей, кількість
бракованих деталей, відсоток браку.

Розміщуємо TListBox на формі.
Читаємо числа з файлу в TListBox:

listbox1.Items.LoadFromFile('detali.in');   

       listbox1 ім’я контролу в проекті, Itemsрядки контролу,  LoadFromFile – завантаження з файлу 'detali.in'. Після виконання цього коду числа будуть розміщені на listbox1 так само, як і в файлі – кожне з нового рядка.













              Нумерація рядків починається з 0, дані, як і в попередніх контролах, мають тип String.
Щоб прочитати рядок із listbox у змінну, потрібно вказати номер (індекс) рядка властивості Items.
              Як видно в попередньому малюнку та як виходить з умови задачі, перші три числа – це відповідно розмір, нижній  та верхній допуски розміру деталі. Їх потрібно зчитати у змінні:

  A:=StrToInt(listbox1.Items[0]);  - розмір деталі
  mb:=StrToInt(listbox1.Items[1]); - нижній  та
  pb:=StrToInt(listbox1.Items[2]); - верхній допуски

              Функція StrToInt використовується, бо в listbox , дані мають тип String.
Щоб опрацювати масив рядків listbox, нам потрібно знати межі циклу. Нижню межу (початкове значення змінної і лічильника циклу) ми вже знаємо. Оскільки перші три рядки містять службові числа, ми їх вже зчитали, то початкове значення змінної і лічильника циклу  буде 3. А от кінцеве значення змінної і лічильника циклу ми можемо дізнатися, якщо отримаємо кількість усіх рядків listbox . А цю  інформацію має властивість Count. Отже,

N:=listbox1.Count; - кількість усіх рядків listbox.

Тепер запускаємо цикл:

for i:=3 to N-1 do               - цикл від четвертого до останнього рядку
   begin
     pot:=StrToInt(listbox1.Items[i]);            -  отримуємо черговий рядок
     if (pot>=(A-mb)) and (pot<=(A+pb))      - якщо розмір деталі 
                                                                         не перевищує допусків
       then
          begin
            inc(Sprav);                                            - збільшуємо кількість справних на 1
            listbox2.Items.Add(listbox1.Items[i]+' Справна');    - виводимо на другий 
                        listbox поточний зчитаний розмір та слово Справна
          end
        else                                                                                              інакше
          begin                                                                             
            inc(Brak); );                                                     - збільшуємо кількість 
                                                                                       несправних на 1    
    listbox2.Items.Add(listbox1.Items[i]+' Бракована');    -   виводимо на другий 
                       listbox поточний зчитаний розмір та слово Бракована
          end;
   end;

Далі розраховуємо відсоток браку, додаємо на memo рядки з результуючою інформацією та виводимо її з memo до файлу analiz.out. Все.

   Proz:=Brak*100/N;
   memo2.Clear;
   memo2.Lines.Add('Кількість деталей - '+IntToStr(N-3));
   memo2.Lines.Add('Кількість справних деталей - '+IntToStr(Sprav));
   memo2.Lines.Add('Кількість бракованих деталей - '+IntToStr(Brak));
   memo2.Lines.Add('Відсоток браку -   '+FloatToStrF(Proz,fffixed,2,2)+'%');
   memo2.Lines.SaveToFile('analiz.out');    

Ось що в нас вийшло


Я виставив у memo колір фону, як форми, щоб зімітувати лейбли.

Програмний код:




Немає коментарів:

Дописати коментар