Откройте файл ANSI и Сохраните файл Unicode с помощью Delphi

Я бы предложил использовать .Net Случайный класс для генерации случайных чисел. Это также проще в использовании.

Найдите первое случайное число между 0 и минимальным значением, тогда второе случайное число будет в диапазоне: randomMin(MinValue) => (MinValue - randomMin, MaxValue - randomMin) :

randomMin = rnd1.Next(Min + 1)
randomMax = rnd2.Next(Min - randomMin, Max - randomMin + 1)
result = randomMin + randomMax

К помните, что в классе Random верхний предел является исключительным, поэтому нам нужно добавить 1 к значению Max, чтобы включить его в диапазон случайных значений.


Выполните пример теста:
( В этих примерах кода предполагается, что используемая версия VB.Net - не менее V.14, VS 2015+ )

Private rnd1 As Random = New Random()
Private rnd2 As Random = New Random()

'(...)

Dim Min As Integer = 120
Dim Max As Integer = 235

For i = 0 To 100
    Dim randomValues = GetRandomNumbersInRange(Min, Max)
    Console.WriteLine($"Random Min: {randomValues.rndMin} Random Max {randomValues.rndMax}")
    Console.WriteLine($"Sum: {randomValues.rndMin + randomValues.rndMax}")
Next

'(...)

Private Function GetRandomNumbersInRange(Min As Integer, Max As Integer) As 
                                        (rndMin As Integer, rndMax As Integer)
    Dim randomMin As Integer = rnd1.Next(Min + 1)
    Return (randomMin, rnd2.Next(Min - randomMin, Max - randomMin + 1))
End Function

Если вы хотите, чтобы метод напрямую возвращал сумму, вы можете изменить тип возврата метода следующим образом:

Dim Min As Integer = 120
Dim Max As Integer = 235

For i = 0 To 100
    Console.WriteLine(GetSumRandomNumbersInRange(Min, Max))
Next

'(...)

Private Function GetSumRandomNumbersInRange(Min As Integer, Max As Integer) As Integer
    Dim randomMin As Integer = rnd1.Next(Min + 1)
    Return randomMin + rnd2.Next(Min - randomMin, Max - randomMin + 1)
End Function

Случайные числа также могут быть выбран с:
randomMid(MaxValue - MinValue) => (MinValue, MaxValue - randomMid)

В этом случае, возможно, реализовано как:

Private Function GetSumRandomNumbersInRange2(Min As Integer, Max As Integer) As Integer
    Dim randomFirst As Integer = rnd1.Next(Max - Min + 1)
    Return randomFirst + rnd2.Next(Min, Max - randomFirst + 1)
End Function

6
задан menjaraz 22 February 2012 в 13:21
поделиться

2 ответа

Это очень просто сделать с моей единицей TGpTextFile. Я соединю краткий образец и отправлю его здесь.

Это должно также быть очень просто с новым Delphi 2009 - Вы, возможно, используете его?

Править: Это его, как можно сделать это с помощью моего материала в пред2009 Delphis.

var
  strAnsi   : TGpTextFile;
  strUnicode: TGpTextFile;
begin
  strAnsi := TGpTextFile.Create('c:\0\test.udl');
  try
    strAnsi.Reset; // you can also specify non-default 8-bit codepage here
    strUnicode := TGpTextFile.Create('c:\0\test-out.udl');
    try
      strUnicode.Rewrite([cfUnicode]);
      while not strAnsi.Eof do
        strUnicode.Writeln(strAnsi.Readln);
    finally FreeAndNil(strUnicode); end;
  finally FreeAndNil(strAnsi); end;
end;

Лицензия: фрагмент кода выше принадлежит общественному достоянию. Используйте его так или иначе, Вам нравится.

7
ответ дан 8 December 2019 в 14:49
поделиться

Хорошо, с помощью Дельфи 2009, я смог придумать следующий код, который, кажется, работает, но действительно ли это - надлежащий способ сделать это преобразование?

var
  sl : TStrings;
  FileName : string;
begin
  FileName := fServerDir+'configuration\hdconfig4.udl';
  sl := TStringList.Create;
  try
    sl.LoadFromFile(FileName, TEncoding.Default);
    sl.SaveToFile(FileName, TEncoding.Unicode);
  finally
    sl.Free;
  end;
end;
9
ответ дан 8 December 2019 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: