Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 30.01.2018
Сообщений: 235
1
RAD XE3+

Не могу понять ошибку

23.03.2018, 20:32. Просмотров 835. Ответов 4
Метки нет (Все метки)


В этом коде при компиляции пишет в строке Seek(ft, sc[i]);: Implicit string cast with potential data loss from.
Я так понял это означает: Что при копировании данных с большой строки в маленькую теряется часть данных ?

Как это можно исправить ?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
var
  i, j, b: integer;
  ft, ft2: TextFile;
  s: string;
  sc: array of integer;
 
begin
  if OpenDialog1.Execute then
  begin
    Randomize;
 
    AssignFile(ft, OpenDialog1.FileName);
    Reset(ft);
 
    i:= 0;
 
    SetLength(sc, 1000); // чтобы не перекладывать в памяти массив на каждой строчке
 
    // Подсчёт количества строк в файле
    while not Eof(ft) do
    begin
      sc[i] := FilePos(ft); // в массиве будут позиции начала строк
 
      Inc(i);
 
      if i >= Length(sc) then  // добавим еще 1000 элементов в массив, если не хватило
        SetLength(sc, Length(sc) + 1000);
 
      SeekEoln(ft);  // перейдем в конец строки
    end;
 
    SetLength(sc, i); // уберем лишние элементы массива
 
    // Перемешивание массива
    for i := High(sc) downto Low(sc) do
    begin
      b:= Random(i);
      j:= sc[b];
      sc[b]:= sc[i];
      sc[i]:= j;
    end;
 
    AssignFile(ft2, ExtractFileDir(OpenDialog1.FileName)+'\Random_STR.txt');
    Rewrite(ft2);
 
    for i := Low(sc) to High(sc) do
    begin
      Seek(ft, sc[i]);
 
      Readln(ft, s);
 
      Writeln(ft2, s);
    end;
 
    CloseFile(ft);
    CloseFile(ft2);
  end;
end;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2018, 20:32
Ответы с готовыми решениями:

Не могу понять ошибку
Всем здрасте. Помогите кто-чем может procedure TForm1.StartClick(Sender:TObject); var i, j, K,...

Не могу понять ошибку
begin s:=ExtractFilePath(Application.ExeName); case TreeView1.Selected.AbsoluteIndex of...

Создаю класс. Не могу понять ошибку
type Neuron = class public Weights: array of double; THValue: double; procedure...

Показывает ошибку, не могу понять причину
Показывает такую ошибку Project2.dpr(16): Illegal type in Write/Writeln statement в 16 строке ...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
4
Модератор
63223 / 46978 / 32379
Регистрация: 18.05.2008
Сообщений: 113,863
23.03.2018, 21:08 2
Лучший ответ Сообщение было отмечено Hardalternative как решение

Решение

Процедура Seek не предназначена для работы с текстовыми файлами, строки в текстовом файле не имеют индексов.
1
пофигист широкого профиля
4299 / 2818 / 797
Регистрация: 15.07.2013
Сообщений: 16,324
24.03.2018, 02:22 3

Не по теме:

Puporev, достаточно было написать только то что перед запятой. То что после запятой смущает употреблением термина "индекс", который не используется ни для каких файловых переменных Паскаля, ни для функции Seek, которая всего лишь смещает "позицию" на байт с заданным "номером пп". :)



Добавлено через 33 минуты
Кстати FilePos тоже не работает с TextFile.

Добавлено через 5 минут
Hardalternative, вам бы лучше стоит озвучить стоящую перед вами задачу, прежде чем просить исправить ошибки в явно негодном коде.
0
Модератор
63223 / 46978 / 32379
Регистрация: 18.05.2008
Сообщений: 113,863
24.03.2018, 07:11 4
Просто ТС пишет
Pascal
1
Seek(ft, sc[i]);
вот я и написал что нет там никаких индексов типа [i].
0
1 / 1 / 0
Регистрация: 30.01.2018
Сообщений: 235
24.03.2018, 19:33  [ТС] 5
northener, Puporev, Ребята спасибо большое за то что откликнулись, уже сделал код как нужно. То есть по другому.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2018, 19:33

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Выдает ошибку. Не могу понять что не так(
procedure TForm1.btn1Click(Sender: TObject); var a,b,c:Integer; x1,x2,D: Real; begin If...

Не могу понять ошибку. Постоянно её выдает на выделенном ниже моменте
unit Unit7; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Надо исправить ошибку, не могу понять в чем дело. Тема модули
program project1; uses unit1,unit2; var A:tm1; B:tm1; C:tm1; i,j,imx,imin:integer;...

Ребят, выкидает ошибку в ряде Case. Не могу понять что не так
На панели интерфейса предусмотреть возможность выбора одной из трех функций f (x): sin (x), x^2,e^x...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.