Word and string delphi

Работа со строками и символами

Обработка текста — одна из часто встречающихся задач программирования. Если требуется обработать какие-либо текстовые данные, то без знаний того материала, что будет изложен ниже, просто не обойтись. Особенно, если данные сформированы не лично вами, а какой-либо сторонней программой или другим человеком.

Символы

Символ — это одна единица текста. Это буква, цифра, какой-либо знак. Кодовая таблица символов состоит из 256 позиций, т.е. каждый символ имеет свой уникальный код от 0 до 255. Символ с некоторым кодом N записывают так: #N. Прямо так символы и указываются в коде программы. Так как код символа представляет собой число не более 255, то очевидно, что в памяти символ занимает 1 байт. Как известно, менее байта размерности нет. Точнее, она есть — это бит, но работать с битами в программе мы не можем: байт — минимальная единица. Просмотреть таблицу символов и их коды можно с помощью стандартной утилиты «Таблица символов», входящей в Windows (ярлык расположен в меню Пуск — Программы — Стандартные — Служебные). Но совсем скоро мы и сами напишем нечто подобное.

Строки

Строка, она же текст — это набор символов, любая их последовательность. Соответственно, один символ — это тоже строка, тоже текст. Текстовая строка имеет определённую длину. Длина строки — это количество символов, которые она содержит. Если один символ занимает 1 байт, то строка из N символов занимает соответственно N байт.

Есть и другие кодовые таблицы, в которых 1 символ представлен не одним байтом, а двумя. Это Юникод (Unicode). В таблице Юникода есть символы всех языков мира. К сожалению, работа с Юникодом довольно затруднена и его поддержка пока что носит лишь локальный характер. Delphi не предоставляет возможностей для работы с Юникодом. Программная часть есть, но вот визуальные элементы — формы, кнопки и т.д. не умеют отображать текст в формате Юникода. Будем надеяться, в ближайшем будущем такая поддержка появится. 2 байта также называют словом (word). Отсюда и название соответствующего числового типа данных — Word (число, занимающее в памяти 2 байта, значения от 0 до 65535). Количество «ячеек» в таблице Юникода составляет 65536 и этого вполне достаточно для хранения всех языков мира. Если вы решили, что «1 байт — 256 значений, значит 2 байта — 2*256 = 512 значений», советую вспомнить двоичную систему и принцип хранения данных в компьютере.

Типы данных

Перейдём непосредственно к программированию. Для работы с символами и строками существуют соответствующие типы данных:

· Char — один символ (т.е. 1 байт);

· String — строка символов, текст (N байт).

Официально строки вмещают лишь 255 символов, однако в Delphi в строку можно записать гораздо больше. Для хранения больших текстов и текстов со специальными символами существуют специальные типы данных AnsiString и WideString (последний, кстати, двухбайтовый, т.е. для Юникода).

Для задания текстовых значений в Pascal используются одинарные кавычки (не двойные!). Т.е. когда вы хотите присвоить строковой переменной какое-либо значение, следует сделать это так:

s:=’text’;

Символы указываются аналогично, только в кавычках присутствует один-единственный символ.

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

В скобках указывается максимальная длина строки.

Операции со строками

Основной операцией со строками является сложение. Подобно числам, строки можно складывать. И если в числах стулья с апельсинами складывать нельзя, то в строках — можно. Сложение строк — это просто их объединение. Пример:

var s: string;
...
s:='123'+'456';
//s = "123456"

Поскольку каждая строка — это последовательность символов, каждый символ имеет свой порядковый номер. В Pascal нумерация символов в строках начинается с 1. Т.е. в строке «ABC» символ «A» — первый, «B» — второй и т.д.

Порядковый номер символа в строке придуман не случайно, ведь именно по этим номерам, индексам, осуществляются действия над строками. Получить любой символ из строки можно указанием его номера в квадратных скобках рядом с именем переменной. Например:

var s: string; c: char; 
...
s:='Hello!';
c:=s[2];
//c = "e"

Чуть позже, когда мы будем изучать массивы, станет понятно, что строка — это массив символов. Отсюда следует и форма обращения к отдельным символам.

Обработка строк

Перейдём к функциям и процедурам обработки строк.

Длину строки можно узнать с помощью функции Length(). Функция принимает единственный параметр — строку, а возвращает её длину. Пример:

var Str: String; L: Integer; 
{ ... } 
Str:='Hello!'; 
L:=Length(Str);
//L = 6

Нахождение подстроки в строке

Неотъемлемой задачей является нахождение подстроки в строке. Т.е. задача формулируется так: есть строка S1. Определить, начиная с какой позиции в неё входит строка S2. Без выполнения этой операции ни одну обработку представить невозможно.

Итак, для такого нахождения существует функция Pos(). Функция принимает два параметра: первый — подстроку, которую нужно найти, второй — строку, в которой нужно выполнить поиск. Поиск осуществляется с учётом регистра символов. Если функция нашла вхождение подстроки в строку, возвращается номер позиции её первого вхождения. Если вхождение не найдено, функция даёт результат 0. Пример:

var Str1, Str2: String; P: Integer; 
{ ... } 
Str1:='Hi! How do you do?'; 
Str2:='do'; 
P:=Pos(Str2, Str1);
//P = 9

Удаление части строки

Удалить часть строки можно процедурой Delete(). Следует обратить внимание, что это именно процедура, а не функция — она производит действия непосредственно над той переменной, которая ей передана. Итак, первый параметр — переменная строкового типа, из которой удаляется фрагмент (именно переменная! конкретное значение не задаётся, т.к. процедура не возвращает результат), второй параметр — номер символа, начиная с которого нужно удалить фрагмент, третий параметр — количество символов для удаления. Пример:

var Str1: String; 
{ ... } 
Str1:='Hello, world!'; 
Delete(Str1, 6, 7);
// Str1 = "Hello!"

Следует отметить, что если длина удаляемого фрагмента окажется больше количества символов в строке, начиная с указанной позиции (т.е. «вылезем за край»), функция нормально отработает. Поэтому, если нужно удалить фрагмент из строки с какого-то символа до конца, не нужно вычислять количество этих символов. Лучшим способом будет задать длину самой этой строки.

Вот пример. Допустим, требуется найти в строке первую букву «a» и удалить следующую за ней часть строки. Сделаем следующим образом: позицию буквы в строке найдём функцией Pos(), а фрагмент удалим функцией Delete().

var Str: String; 
{ ... } 
Str:='This is a test.';
Delete(Str,Pos('a',Str),Length(Str));

Попробуем подставить значения и посмотреть, что передаётся функции Delete. Первая буква «a» в строке стоит на позиции 9. Длина всей строки — 15 символов. Значит вызов функции происходит такой: Delete(Str,9,15). Видно, что от буквы «a» до конца строки всего 7 символов… Но функция сделает своё дело, не смотря на эту разницу. Результатом, конечно, будет строка «This is «. Данный пример одновременно показал и комбинирование нескольких функций.

Копирование (извлечение) части строки

Ещё одной важной задачей является копирование части строки. Например, извлечение из текста отдельных слов. Выделить фрагмент строки можно удалением лишних частей, но этот способ неудобен. Функция Copy() позволяет скопировать из строки указанную часть. Функция принимает 3 параметра: текст (строку), откуда копировать, номер символа, начиная с которого скопировать и количество символов для копирования. Результатом работы функции и будет фрагмент строки.

Пример: пусть требуется выделить из предложения первое слово (слова разделены пробелом). На форме разместим Edit1 (TEdit), в который будет введено предложение. Операцию будет выполнять по нажатию на кнопку. Имеем:

procedure TForm1.Button1Click(Sender: TObject);
var s,word: string;
begin
  s:=Edit1.Text;
  word:=Copy(s,1,Pos(' ',s)-1);
  ShowMessage('Первое слово: '+word);
end;

В данном случае из строки копируется фрагмент от начала до первого пробела. Число символов берётся на единицу меньше, т.к. в противном случае пробел также будет скопирован.

Вставка подстроки в строку

Если требуется в имеющуюся строку вставить другую строку, можно использовать процедуру Insert(). Первый параметр — строка для вставки, второй — переменная, содержащая строку, куда нужно вставить, третий — позиция (номер символа), начиная с которого будет вставлена строка. Пример:

procedure TForm2.Button1Click(Sender: TObject);
var S: String;
begin
  S:='1234567890';
  Insert('000',S,3);
  ShowMessage(S)
 
end;

В данном случае результатом будет строка «1200034567890».

Пример «посерьёзнее»

Примеры, приведённые выше, лишь демонстрируют принцип работы со строками с помощью функций Length(), Pos(), Delete() и Copy(). Теперь решим задачу посложнее, которая потребует комбинированного применения этих функций.

Задача: текст, введённый в поле Memo, разбить на слова и вывести их в ListBox по одному на строке. Слова отделяются друг от друга пробелами, точками, запятыми, восклицательными и вопросительными знаками. Помимо этого вывести общее количество слов в тексте и самое длинное из этих слов.

Вот уж да… Задача вовсе не простая. Во-первых, вы сразу должны догадаться, что нужно использовать циклы. Без них никак, ведь мы не знаем, какой текст будет передан программе для обработки. Во-вторых, слова отделяются разными символами — это создаёт дополнительные трудности. Что ж, пойдём по порядку.

Интерфейс: Memo1 (TMemo), Button1 (TButton), ListBox1 (TListBox), Label1, Label2 (TLabel).

Сначала перенесём введённый текст в переменную. Для того, чтобы разом взять весь текст из Memo, обратимся к свойству Lines.Text:

procedure TForm1.Button1Click(Sender: TObject);
var Text: string;
begin
  Text:=Memo1.Lines.Text;
end;

Теперь перейдём к обработке. Первое, что нужно сделать — разобраться с символами-разделителями. Дело в том, что такие символы могут запросто идти подряд, ведь после запятых, точек и других знаков ставится пробел. Обойти эту трудность можно таким простым способом: все разделяющие символы заменим на какой-то один, например на запятую. Для этого пройдём все символы и сделаем необходимые замены. Чтобы определить, является ли символ разделителем, запишем все разделители в отдельную строковую переменную (константу), а затем будем искать в этой строке каждый символ функцией Pos(). Все эти замены будут производиться в переменной, чтобы оригинальный текст в Memo (т.е. на экране) не был затронут. Тем не менее, для проверки промежуточных результатов работы имеет смысл выводить обработанный текст куда-либо. Например, в другое поле Memo. Чтобы пройти все символы, воспользуемся циклом FOR, где переменная пройдёт порядковые номера всех символов, т.е. от 1 до длины строки текста:

procedure TForm1.Button1Click(Sender: TObject);
const DelSym = ' .,!?';
var Text: string; i: integer;
begin
  Text:=Memo1.Lines.Text;
  for i := 1 to Length(Text) do
    if Pos(Text[i],DelSym) > 0 then
      Text[i]:=',';
 
  Memo2.Text:=Text;
end;

Теперь нужно устранить помехи. Во-первых, первый символ не должен быть разделителем, т.е. если первый символ — запятая, его нужно удалить. Далее, если подряд идут несколько запятых, их нужно заменить на одну. И наконец, чтобы корректно обработать весь текст, последним символом должна быть запятая.

if Text[1] = ',' then
    Delete(Text,1,1);
while Pos(',,',Text) > 0 do
  Delete(Text,Pos(',,',Text),1);
if Text[Length(Text)] <> ',' then
  Text:=Text+',';

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

Ну вот, теперь в тексте не осталось ничего лишнего — только слова, разделённые запятыми. Сначала добьёмся того, чтобы программа извлекла из текста первое слово. Для этого найдём первую запятую, скопируем слово от начала текста до этой запятой, после чего удалим это слово из текста вместе с запятой. Удаление делается для того, чтобы далее можно было, проделав ту же самую операцию, вырезать следующее слово.

var Word: string;
{...}
Word:=Copy(Text,1,Pos(',',Text)-1);
Delete(Text,1,Length(Word)+1);

Теперь в переменной Word у нас слово из текста, а в переменной Text вся остальная часть текста. Вырезанное слово теперь добавляем в ListBox, вызывая ListBox.Items.Add(строка_для_добавления).

Теперь нам нужно организовать такой цикл, который позволил бы вырезать из текста все слова, а не только первое. В данном случае подойдёт скорее REPEAT, чем WHILE. В качестве условия следует указать Length(Text) = 0, т.е. завершить цикл тогда, когда текст станет пустым, т.е. когда мы вырежем из него все слова.

repeat
  Word:=Copy(Text,1,Pos(',',Text)-1);
  Delete(Text,1,Length(Word)+1);
  ListBox1.Items.Add(Word);
until Length(Text) = 0;

Итак, на данный момент имеем:

procedure TForm1.Button1Click(Sender: TObject);
const DelSym = ' .,!?';
var Text,Word: string; i: integer;
begin
  Text:=Memo1.Lines.Text;
  for i := 1 to Length(Text) do
    if Pos(Text[i],DelSym) > 0 then
      Text[i]:=',';
 
  if Text[1] = ',' then
    Delete(Text,1,1);
  while Pos(',,',Text) > 0 do
    Delete(Text,Pos(',,',Text),1);
        
  repeat
    Word:=Copy(Text,1,Pos(',',Text)-1);
    Delete(Text,1,Length(Word)+1);
    ListBox1.Items.Add(Word);
  until Length(Text) = 0;
end;

Если вы сейчас запустите программу, то увидите, что всё отлично работает. За исключением одного момента — в ListBox в конце появились какие-то пустые строки… Возникает вопрос: откуда же они взялись? Об этом вы узнаете в следующем разделе урока, а пока давайте реализуем требуемое до конца.

Количество слов в тексте определить очень просто — не нужно заново ничего писать. Т.к. слова у нас занесены в ListBox, достаточно просто узнать, сколько там строк — ListBox.Items.Count.

Label1.Caption:='Количество слов в тексте: '+IntToStr(ListBox1.Items.Count);

Теперь нужно найти самое длинное из всех слов. Алгоритм нахождения максимального числа таков: принимаем в качестве максимального первое из чисел. Затем проверяем все остальные числа таким образом: если число больше того, которое сейчас записано как максимальное, делаем максимальным это число. В нашем случае нужно искать максимальную длину слова. Для этого можно добавить код в цикл вырезания слов из текста или произвести поиск после добавления всех слов в ListBox. Сделаем вторым способом: организуем цикл по строкам ListBox. Следует отметить, что строки нумеруются с нуля, а не с единицы! В отдельной переменной будем хранить самое длинное слово. Казалось бы, нужно ведь ещё хранить максимальную длину слова, чтобы было с чем сравнивать… Но не нужно заводить для этого отдельную переменную, ведь мы всегда можем узнать длину слова функцией Length(). Итак, предположим, что первое слово самое длинное…

var LongestWord: string;
{...}
  LongestWord:=ListBox1.Items[0];
  for i := 1 to ListBox1.Items.Count-1 do
    if Length(ListBox1.Items[i]) > Length(LongestWord) then
      LongestWord:=ListBox1.Items[i];
 
  Label2.Caption:='Самое длинное слово: '+LongestWord+' ('+IntToStr(Length(LongestWord))+' букв)';

Почему цикл до ListBox.Items.Count-1, а не просто до Count, разберитесь самостоятельно :-)

Вот теперь всё готово!

procedure TForm1.Button1Click(Sender: TObject);
const DelSym = ' .,!?';
var Text,Word,LongestWord: string; i: integer;
begin
  Text:=Memo1.Lines.Text;
  for i := 1 to Length(Text) do
    if Pos(Text[i],DelSym) > 0 then
      Text[i]:=',';
 
  if Text[1] = ',' then
    Delete(Text,1,1);
  while Pos(',,',Text) > 0 do
    Delete(Text,Pos(',,',Text),1);
 
  Text:=AnsiReplaceText(Text,Chr(13),'');
  Text:=AnsiReplaceText(Text,Chr(10),'');
 
  repeat
    Word:=Copy(Text,1,Pos(',',Text)-1);
    Delete(Text,1,Length(Word)+1);
    ListBox1.Items.Add(Word);
  until Length(Text) = 0;
 
  Label1.Caption:='Количество слов в тексте: '+IntToStr(ListBox1.Items.Count);
 
  LongestWord:=ListBox1.Items[0];
  for i := 1 to ListBox1.Items.Count-1 do
    if Length(ListBox1.Items[i]) > Length(LongestWord) then
      LongestWord:=ListBox1.Items[i];
 
  Label2.Caption:='Самое длинное слово: '+LongestWord+' ('+IntToStr(Length(LongestWord))+' букв)';
end;

Работа с символами

Собственно, работа с символами сводится к использованию двух основных функций — Ord() и Chr(). С ними мы уже встречались. Функция Ord() возвращает код указанного символа, а функция Chr() — наоборот, возвращает символ с указанным кодом.

Помните «Таблицу символов»? Давайте сделаем её сами!

Вывод осуществим в TStringGrid. Этот компонент представляет собой таблицу, где в каждой ячейке записано текстовое значение. Компонент расположен на вкладке Additional (по умолчанию следует прямо за Standard). Перво-наперво настроим нашу табличку. Нам нужны всего две колонки: в одной будем отображать код символа, а в другой — сам символ. Количество колонок задаётся в свойстве с логичным названием ColCount. Устанавливаем его равным 2. По умолчанию у StringGrid задан один фиксированный столбец и одна фиксированная строка (они отображаются серым цветом). Столбец нам не нужен, а вот строка очень кстати, поэтому ставим FixedCols = 0, а FixedRows оставляем = 1.

Заполнение осуществим прямо при запуске программы, т.е. не будем ставить никаких кнопок. Итак, создаём обработчик события OnCreate() формы.

Количество символов в кодовой таблице 256, плюс заголовок — итого 257. Зададим число строк программно (хотя можно задать и в Инспекторе Объекта):

procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.RowCount:=257;
end;

Вывод делается крайне просто — с помощью цикла. Просто проходим числа от 0 до 255 и выводим соответствующий символ. Также выводим надписи в заголовок. Доступ к ячейкам StringGrid осуществляется с помощью свойства Cells: Cells[номер_столбца,номер_строки]. В квадратных скобках указываются номера столбца и строки (начинаются с нуля). Значения текстовые.

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  StringGrid1.RowCount:=257;
  StringGrid1.Cells[0,0]:='Код';
  StringGrid1.Cells[1,0]:='Символ';
  for i := 0 to 255 do
  begin
    StringGrid1.Cells[0,i+1]:=IntToStr(i);
    StringGrid1.Cells[1,i+1]:=Chr(i);
  end;
end;

Запускаем, смотрим.

Специальные символы

Если вы внимательно посмотрите на нашу таблицу, то увидите, что многие символы отображаются в виде квадратиков. Нет, это не значки. Так отображаются символы, не имеющие визуального отображения. Т.е. символ, например, с кодом 13 существует, но он невидим. Эти символы используются в дополнительных целях. К примеру, символ #0 (т.е. символ с кодом 0) часто применяется для указания отсутствия символа. Существуют также строки, называемые null-terminated — это строки, заканчивающиеся символом #0. Такие строки используются в языке Си.
По кодам можно опознавать нажатия клавиш. К примеру, клавиша Enter имеет код 13, Escape — 27, пробел — 32, Tab — 9 и т.д.

Давайте добавим в нашу программу возможность узнать код любой клавиши. Для этого обработаем событие формы OnKeyPress(). Чтобы этот механизм работал, необходимо установить у формы KeyPreview = True.

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  ShowMessage('Код нажатой клавиши: '+IntToStr(Ord(Key)));
end;

Здесь мы выводим окошко с текстом. У события есть переменная Key, в которой хранится символ, соответствующий нажатой клавише. С помощью функции Ord() узнаём код этого символа, а затем функцией IntToStr() преобразуем это число в строку.

Пример «посерьёзнее» — продолжение

Вернёмся к нашему примеру. Пришло время выяснить, откуда в ListBox берутся пустые строки. Дело в том, что они не совсем пустые. Да, визуально они пусты, но на самом деле в каждой из них по 2 специальных символа. Это символы с кодами 13 и 10 (т.е. строка #13#10). В Windows такая последовательность этих двух не визуальных символов означает конец текущей строки и начало новой строки. Т.е. в любом файле и вообще где угодно переносы строк — это два символа. А весь текст, соответственно, остаётся непрерывной последовательностью символов. Эти символы можно (и даже нужно) использовать в случаях, когда требуется вставить перенос строки.

Доведём нашу программу по поиску слов до логического конца. Итак, чтобы избавиться от пустых строк, нам нужно удалить из текста символы #13 и #10. Сделать это можно с помощью цикла, по аналогии с тем, как мы делали замену двух запятых на одну:

while Pos(Chr(13),Text) > 0 do
  Delete(Text,Pos(Chr(13),Text),1);
 
while Pos(Chr(10),Text) > 0 do
  Delete(Text,Pos(Chr(10),Text),1);

Ну вот — теперь программа полностью работоспособна!

Дополнительные функции для работы со строками — модуль StrUtils

Дополнительный модуль StrUtils.pas содержит дополнительные функции для работы со строками. Среди этих функций множество полезных. Вот краткое описание часто используемых функций:

PosEx(подстрока, строка, отступ) — функция, аналогичная функции Pos(), но выполняющая поиск с указанной позиции (т.е. с отступом от начала строки). К примеру, если вы хотите найти в строке второй пробел, а не первый, без этой функции вам не обойтись. Чтобы сделать поиск второго пробела вручную, нужно предварительно вырезать часть из исходной строки.

AnsiReplaceStr, AnsiReplaceText (строка, текст_1, текст_2) — функции выполняют замену в строке строка строки текст_1 на текст_2. Функции отличаются только тем, что первая ведёт замену с учётом регистра символов, а вторая — без него.

В нашей программе можно использовать эти функции для вырезания из строки символов #13 и #10 — для этого в качестве текста для замены следует указать пустую строку. Вот решение в одну строку кода:

Text:=AnsiReplaceText(AnsiReplaceText(Text,Chr(13),''),Chr(10),'');

DupeString(строка, число_повторений) — формирует строку, состоящую из строки строка путём повторения её заданное количество раз.

ReverseString(строка) — инвертирует строку («123» -> «321»).

Также следует упомянуть у функциях преобразования регистра.

UpperCase(строка) — преобразует строку в верхний регистр; LowerCase(строка) — преобразует строку в нижний регистр.

Для преобразования отдельных символов следует использовать эти же функции.

Подробную информацию о каждой функции можно получить, введя её название в любом месте редактора кода, установив курсор на это название (или выделив его) и нажав F1.

Скриншоты программ, описанных в статье

0018_01

Программа извлечения слов из текста

0018_02

Таблица символов

Заключение

Длинный получился урок. Итак, сегодня мы познакомились со строками и символами и научились с ними работать. Изученные приёмы используются практически повсеместно. Не бойтесь экспериментировать — самостоятельно повышайте свой уровень навыков программирования!

На чтение 2 мин. Просмотров 49 Опубликовано 15.12.2019

этот тип данных может содержать только числа, и то, только до 255 (или до — 255)

🙂 А нам как раз сейчас требуется на работу Хороший программист! 🙂

Если ты имеешб ввиду word это байт, то да!

Re: Anatoly Podgoretsky 🙂 Отлично! Тогда вам к нам! ))

И кстате, почему ты не поможешь этому парню?

А действительно в станд. поставке Delphi толькодля UTF-8 (1 б.) и UCS4 (4-байт. Unicode)

WideChar characters use more than one byte to represent every character. In the current implementations, WideChar is word-sized (16-bit) characters ordered according to the Unicode character set (note that it could be longer in future implementations).

Registriert seit: 15. Sep 2003
184 Beitrдge

Delphi 2010 Professional

Содержание

  1. Word to String
  2. Re: Word to String
  3. Re: Word to String
  4. Re: Word to String
  5. Re: Word to String
  6. Delphi string to word

Word to String

Mich wьrde interessieren, wie man Word in String umwandelt, und umgekehrt.
Dьrfte doch eigentlich nicht so problematisch sein.

Patrick
Цffentliches Profil ansehen
Besuche die Homepage von Patrick!
Mehr Beitrдge von Patrick finden

Registriert seit: 10. Jun 2002
4.648 Beitrдge

Delphi XE Professional

Re: Word to String

Registriert seit: 12. Dez 2003
Ort: Erfurt
345 Beitrдge

Delphi 2005 Personal

Re: Word to String

Ratte
Цffentliches Profil ansehen
Mehr Beitrдge von Ratte finden

Registriert seit: 15. Sep 2003
184 Beitrдge

Delphi 2010 Professional

Re: Word to String

Auf so etwas muss man ersteinmal kommen, das ist ja viel zu einfch.

Ich bin gerade dabei fьr ein Spiel die Tastenauswahl zu realisieren:
Ich dachte immer, dass der Typ word so z.B. etwas sei: «VK_TAB»!?

Patrick
Цffentliches Profil ansehen
Besuche die Homepage von Patrick!
Mehr Beitrдge von Patrick finden

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.248 Beitrдge

Delphi 2006 Professional

Re: Word to String

VK_TAB ist einfach nur eine Konstannte die in der Unit «Windows» deklariert ist;

Sharky
Цffentliches Profil ansehen
Mehr Beitrдge von Sharky finden

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beitrдge

Delphi string to word

Автор Антон Мельник задал вопрос в разделе Компьютеры, Связь

Как преобразовать тип String в Word в Delphi? и получил лучший ответ

Ответ от ToshaFirma[гуру]
String — это строковый тип, word — двухбайтовый целочисленный (0..2^16)
Если строка содержит символы кроме цифр, ведущих пробелов, «+», «-«, «е» (т.е. если эта строка не представляет число), то не преобразуешь.
Иначе, поможет StrToInt. Описание смотри в справке.

Набрать MessageDlg и нажать кнопку F1. Там все написано. А кратко
подробнее.

INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS

Contact US

Thanks. We have received your request and will respond promptly.

Log In

Come Join Us!

Are you a
Computer / IT professional?
Join Tek-Tips Forums!

  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It’s Free!

*Tek-Tips’s functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

Word to String Conversion

Word to String Conversion

(OP)

5 Sep 03 12:04

Hi everyone!

I need some really quick help.  I’m trying to use the DayOfTheMonth function in my program, which returns a word object.  I need to convert the word into a string.  So I used the wordToStr function, but this converts the word into a wordStr and it doesn’t display properly in my output.  Is there a way to fully convert a word to a string?

Thanks.

Red Flag Submitted

Thank you for helping keep Tek-Tips Forums free from inappropriate posts.
The Tek-Tips staff will check this out and take appropriate action.

Join Tek-Tips® Today!

Join your peers on the Internet’s largest technical computer professional community.
It’s easy to join and it’s free.

Here’s Why Members Love Tek-Tips Forums:

  • Tek-Tips ForumsTalk To Other Members
  • Notification Of Responses To Questions
  • Favorite Forums One Click Access
  • Keyword Search Of All Posts, And More…

Register now while it’s still free!

Already a member? Close this window and log in.

Join Us             Close

Text types
Like many other languages, such as VBA> and Java, Delphi allows you to store letters, words, and sentences in single variables. These can be used to store and display such things as user details, screen titles and so on. A letter is stored in a single character variable type, such as Char, and words and sentences stored in string types, such as String. Here are the different text types in Delphi:

 

 var

   Str1 : Char;       // Holds a single character, small alphabet

   Str2 : WideChar;   // Holds a single character, International alphabet

   Str3 : AnsiChar;   // Holds a single character, small alphabet

   Str4 : ShortString;// Holds a string of up to 255 Char's

   Str5 : String;     // Holds strings of Char's of any size desired

   Str6 : AnsiString; // Holds strings of AnsiChar's any size desired

   Str7 : WideString; // Holds strings of WideChar's of any size desired

We’ll cover the character and string types in turn, and then look at some of the large range of string processing routines provided by the Delphi run time library.

 
Characters
Single character variables hold a single character of text. Normally, this can be held in one byte. AnsiChar types are exactly one byte in size, and can hold any of the characters in the Ansi character set.

 
The Ansi character set

 Char Code Description

 
       9  Tab

      10  Line feed

      13  Carriage return

 ' '  32  Space

  !   33  Exclamation mark

  "   34  Quotation mark

  #   35  Number sign

  $   36  Dollar sign

  %   37  Percent sign

  &   38  Ampersand

  '   39  Apostrophe

  (   40  Left parenthesis

  )   41  Right parenthesis

  *   42  Asterisk

  +   43  Plus sign

  ,   44  Comma

  -   45  Hyphen-minus

  .   46  Full stop

  /   47  Solidus

  0   48  Digit zero

  1   49  Digit one

  2   50  Digit two

  3   51  Digit three

  4   52  Digit four

  5   53  Digit five

  6   54  Digit six

  7   55  Digit seven

  8   56  Digit eight

  9   57  Digit nine

  :   58  Colon

  ;   59  Semicolon

  <   60  Less-than sign

  =   61  Equals sign

  >   62  Greater-than sign

  ?   63  Question mark

  @   64  Commercial at

  A   65  Latin capital letter A

  B   66  Latin capital letter B

  C   67  Latin capital letter C

  D   68  Latin capital letter D

  E   69  Latin capital letter E

  F   70  Latin capital letter F

  G   71  Latin capital letter G

  H   72  Latin capital letter H

  I   73  Latin capital letter I

  J   74  Latin capital letter J

  K   75  Latin capital letter K

  L   76  Latin capital letter L

  M   77  Latin capital letter M

  N   78  Latin capital letter N

  O   79  Latin capital letter O

  P   80  Latin capital letter P

  Q   81  Latin capital letter Q

  R   82  Latin capital letter R

  S   83  Latin capital letter S

  T   84  Latin capital letter T

  U   85  Latin capital letter U

  V   86  Latin capital letter V

  W   87  Latin capital letter W

  X   88  Latin capital letter X

  Y   89  Latin capital letter Y

  Z   90  Latin capital letter Z

  [   91  Left square bracket

     92  Reverse solidus

  ]   93  Right square bracket

  ^   94  Circumflex accent

  _   95  Low line

  `   96  Grave accent

  a   97  Latin small letter a

  b   98  Latin small letter b

  c   99  Latin small letter c

  d  100  Latin small letter d

  e  101  Latin small letter e

  f  102  Latin small letter f

  g  103  Latin small letter g

  h  104  Latin small letter h

  i  105  Latin small letter i

  j  106  Latin small letter j

  k  107  Latin small letter k

  l  108  Latin small letter l

  m  109  Latin small letter m

  n  110  Latin small letter n

  o  111  Latin small letter o

  p  112  Latin small letter p

  q  113  Latin small letter q

  r  114  Latin small letter r

  s  115  Latin small letter s

  t  116  Latin small letter t

  u  117  Latin small letter u

  v  118  Latin small letter v

  w  119  Latin small letter w

  x  120  Latin small letter x

  y  121  Latin small letter y

  z  122  Latin small letter z

  {  123  left curly bracket

  |  124  Vertical line

  }  125  Right curly bracket

  ~  126  Tilde

    127  (not used)

  ?  128  Euro sign Currency Symbols

  ?  129  (not used)

  ?  130  Single low-9 quotation mark General Punctuation

  ?  131  Latin small letter f with hook Latin Extended-B

  ?  132  Double low-9 quotation mark General Punctuation

  ?  133  Horizontal ellipsis General Punctuation

  ?  134  Dagger General Punctuation

  ?  135  Double dagger General Punctuation

  ?  136  Modifier letter circumflex accent Spacing Modifier Letters

  ?  137  Per mille sign General Punctuation

  ?  138  Latin capital letter S with caron Latin Extended-A

  ?  139  Single left-pointing angle quotation mark General Punctuation

  ?  140  Latin capital ligature OE Latin Extended-A

  ?  141  (not used)

  ?  142  Latin capital letter Z with caron Latin Extended-A

  ?  143  (not used)

  ?  144  (not used)

  ?  145  Left single quotation mark General Punctuation

  ?  146  Right single quotation mark General Punctuation

  ?  147  Left double quotation mark General Punctuation

  ?  148  Right double quotation mark General Punctuation

  ?  149  Bullet General Punctuation

  ?  150  En dash General Punctuation

  ?  151  Em dash General Punctuation

  ?  152  Small tilde Spacing Modifier Letters

  ?  153  Trade mark sign Letterlike Symbols

  ?  154  Latin small letter s with caron Latin Extended-A

  ?  155  Single right-pointing angle quotation mark General Punctuation

  ?  156  Latin small ligature oe Latin Extended-A

  ?  157  (not used)

  ?  158  Latin small letter z with caron Latin Extended-A

  ?  159  Latin capital letter Y with diaeresis Latin Extended-A

     160  No-break space

  ?  161  Inverted exclamation mark

  ?  162  Cent sign

  ?  163  Pound sign

  ?  164  Currency sign

  ?  165  Yen sign

  ?  166  Broken bar

  ?  167  Section sign

  ?  168  Diaeresis

  ?  169  Copyright sign

  ?  170  Feminine ordinal indicator

  ?  171  Left-pointing double angle quotation mark

  ?  172  Not sign

  ?  173  Soft hyphen

  ?  174  Registered sign

  ?  175  Macron

  ?  176  Degree sign

  ?  177  Plus-minus sign

  ?  178  Superscript two

  ?  179  Superscript three

  ?  180  Acute accent

  ?  181  Micro sign

  ?  182  Pilcrow sign

  ?  183  Middle dot

  ?  184  Cedilla

  ?  185  Superscript one

  ?  186  Masculine ordinal indicator

  ?  187  Right-pointing double angle quotation mark

  ?  188  Vulgar fraction one quarter

  ?  189  Vulgar fraction one half

  ?  190  Vulgar fraction three quarters

  ?  191  Inverted question mark

  ?  192  Latin capital letter A with grave

  ?  193  Latin capital letter A with acute

  ?  194  Latin capital letter A with circumflex

  ?  195  Latin capital letter A with tilde

  ?  196  Latin capital letter A with diaeresis

  ?  197  Latin capital letter A with ring above

  ?  198  Latin capital letter AE

  ?  199  Latin capital letter C with cedilla

  ?  200  Latin capital letter E with grave

  ?  201  Latin capital letter E with acute

  ?  202  Latin capital letter E with circumflex

  ?  203  Latin capital letter E with diaeresis

  ?  204  Latin capital letter I with grave

  ?  205  Latin capital letter I with acute

  ?  206  Latin capital letter I with circumflex

  ?  207  Latin capital letter I with diaeresis

  ?  208  Latin capital letter Eth

  ?  209  Latin capital letter N with tilde

  ?  210  Latin capital letter O with grave

  ?  211  Latin capital letter O with acute

  ?  212  Latin capital letter O with circumflex

  ?  213  Latin capital letter O with tilde

  ?  214  Latin capital letter O with diaeresis

  ?  215  Multiplication sign

  ?  216  Latin capital letter O with stroke

  ?  217  Latin capital letter U with grave

  ?  218  Latin capital letter U with acute

  ?  219  Latin capital letter U with circumflex

  ?  220  Latin capital letter U with diaeresis

  ?  221  Latin capital letter Y with acute

  ?  222  Latin capital letter Thorn

  ?  223  Latin small letter sharp s

  ?  224  Latin small letter a with grave

  ?  225  Latin small letter a with acute

  ?  226  Latin small letter a with circumflex

  ?  227  Latin small letter a with tilde

  ?  228  Latin small letter a with diaeresis

  ?  229  Latin small letter a with ring above

  ?  230  Latin small letter ae

  ?  231  Latin small letter c with cedilla

  ?  232  Latin small letter e with grave

  ?  233  Latin small letter e with acute

  ?  234  Latin small letter e with circumflex

  ?  235  Latin small letter e with diaeresis

  ?  236  Latin small letter i with grave

  ?  237  Latin small letter i with acute

  ?  238  Latin small letter i with circumflex

  ?  239  Latin small letter i with diaeresis

  ?  240  Latin small letter eth

  ?  241  Latin small letter n with tilde

  ?  242  Latin small letter o with grave

  ?  243  Latin small letter o with acute

  ?  244  Latin small letter o with circumflex

  ?  245  Latin small letter o with tilde

  ?  246  Latin small letter o with diaeresis

  ?  247  Division sign

  ?  248  Latin small letter o with stroke

  ?  249  Latin small letter u with grave

  ?  250  Latin small letter u with acute

  ?  251  Latin small letter  with circumflex

  ?  252  Latin small letter u with diaeresis

  ?  253  Latin small letter y with acute

  ?  254  Latin small letter thorn

  ?  255  Latin small letter y with diaeresis

Notice that the digits come before the upper case letters which come before the lower case letters.

 
Assigning to and from character variables
Here are some examples of characters, along with assignments to and from them:

 

 var

   lower, upper, copied, fromNum : AnsiChar;

 begin

   lower   := 'a';     // Assign a lower case letter

   upper   := 'Q';     // Assign an upper case letter

   copied  := lower;   // Assign from another character variable

   fromNum := Chr(65); // Assign using a function

 end;

 These character variables are now set to these values:

 
 lower   : 'a'

 upper   : 'Q'

 copied  : 'a'

 fromNum : 'A'

Notice the use of a run time library function Chr to convert a number to a character. We can use the Ord function to convert a character into a number:

 

 var

   myNum  : Byte;

 begin

   myNum := Ord('A');  // myNum is set to 65

 end;

What are WideChar types?
The ansi character set derived from the earlier ascii character set. Both were designed around European characters, which comfortably fitted into 256 values, the capacity of a single byte. For a long time, this was the easy way to handle text. But this left many countries, especially in Asia, out of the picture.

 
The WideChar type can support double-byte characters, which can hold numeric representations of the vast alphabets of China, Japan and so on. These are called International characters. International applications must use WideChar and WideString types.

 
Strings
A single character is useful when parsing text, one character at a time. However, to handle words and sentences and screen labels and so on, strings are used. A string is literally a string of characters. It can be a string of Char, AnsiChar or WideChar characters.

 
Assigning to and from a string
A ShortString is a fixed 255 characters long. A String (by default) is the same as an AnsiString, and is of any length you want. WideStrings can also be of any length. Their storage is dynamically handled. In fact, if you copy one string to another, the second will just point to the contents of the first.

 
Here are some assignments:

 

 var

   source, target, last : String;

 begin

   source := 'Hello World';      // Assign from a string literal

   target := source;             // Assign from another variable

   last   := 'Don''t do that';   // Quotes in a string must be doubled

 end;

 source is now set to : Hello World

 target is now set to : Hello World

 last   is now set to : Don't do that

String operators
There are a number of primitive string operators that are commonly used:

 

 +  Concatenates two strings together

 =  Compares for string equality

 <  Is one string lower in sequence than another

 <= Is one string lower or equal in sequence with another

 >  Is one string greater in sequence than another

 >= Is one string greater or equal in sequence with another

 <> Compares for string inequality

Here are some examples using these operators:

 

 var

   myString : string;

 begin

   myString := 'Hello ' + 'World';  // String concatenation

 
   if 'ABC' = 'abc'                

// Equality

   then ShowMessage('ABC = abc');

   if 'ABC' = 'ABC'                 // Equality

   then ShowMessage('ABC = ABC');

   if 'ABC' < 'abc'                 // Less than

   then ShowMessage('ABC < abc');

   if 'ABC' <= 'abc'                // Less than or equal

   then ShowMessage('ABC <= abc');

   if 'ABC' > 'abc'                 // Greater than

   then ShowMessage('ABC > abc');

   if 'ABC' >= 'abc'                // Greater than or equal

   then ShowMessage('ABC >= abc');

   if 'ABC' <> 'abc'                // Inequality

   then ShowMessage('ABC <> abc');

 end;

 ABC = ABC

 ABC < abc

 ABC <= abc

 ABC <> abc

String processing routines
There are a number of string manipulation routines that are given by example below. Click on any of them to learn more (and also click on WrapText for another, more involved routine).

 

 var

   Source, Target : string;

 
 begin

   Source := '12345678';

   Target := Copy(Source, 3, 4);  

// Target now = '3456'

 
   Target := '12345678';

   Insert('-+-', Target, 3);      

// Target now = '12-+-345678'

 
   Target := '12345678';

   Delete(Target, 3, 4);          

// Target now = '1278'

 
   Target := StringOfChar('S', 5);

// Target now = 'SSSSS'

 
   Source := 'This is a way to live A big life';

// Target set to 'This is THE way to live THE big life'

   Target := StringReplace(before, ' a ', ' THE ',

                           [rfReplaceAll, rfIgnoreCase]);

 end;

Click on the following to learn more:

 

  href='RTL.asp?Name=AnsiLeftStr'>AnsiLeftStr        Returns leftmost characters of a string

  href='RTL.asp?Name=AnsiMidStr'>AnsiMidStr         Returns middle characters of a string

  href='RTL.asp?Name=AnsiRightStr'>AnsiRightStr       Returns rightmost characters of a string

  href='RTL.asp?Name=AnsiStartsStr'>AnsiStartsStr      Does a string start with a substring?

  href='RTL.asp?Name=AnsiContainsStr'>AnsiContainsStr    Does a string contain another?

  href='RTL.asp?Name=AnsiEndsStr'>AnsiEndsStr        Does a string end with a substring?

  href='RTL.asp?Name=AnsiIndexStr'>AnsiIndexStr       Check substring list against a string

  href='RTL.asp?Name=AnsiMatchStr'>AnsiMatchStr       Check substring list against a string

  href='RTL.asp?Name=AnsiReverseString'>AnsiReverseString  Reverses characters in a string

  href='RTL.asp?Name=AnsiReplaceStr'>AnsiReplacStr      Replaces all substring occurences

  href='RTL.asp?Name=DupeString'>DupeString         Repeats a substring n times

  href='RTL.asp?Name=StrScan'>StrScan            Scans a string for a specific character

  href='RTL.asp?Name=StuffString'>StuffString        Replaces part of a string text

  href='RTL.asp?Name=Trim'>Trim               Removes leading and trailing white space

  href='RTL.asp?Name=TrimLeft'>TrimLeft           Removes leading white space

  href='RTL.asp?Name=TrimRight'>TrimRight          Removes trailing white space

Converting from numbers to strings

  href='RTL.asp?Name=CurrToStrF'>CurrToStrF        Convert a currency value to a string with formatting

  href='RTL.asp?Name=DateTimeToStr'>DateTimeToStr     Converts TDateTime date and time values to a string

  href='RTL.asp?Name=DateTimeToString'>DateTimeToString  Rich formatting of a TDateTime variable into a string

  href='RTL.asp?Name=DateToStr'>DateToStr         Converts a TDateTime date value to a string

  href='RTL.asp?Name=FloatToStr'>FloatToStr        Convert a floating point value to a string

  href='RTL.asp?Name=FloatToStrF'>FloatToStrF       Convert a floating point value to a string with formatting

  href='RTL.asp?Name=Format'>Format            Rich formatting of numbers and text into a string

  href='RTL.asp?Name=FormatCurr'>FormatCurr        Rich formatting of a currency value into a string

  href='RTL.asp?Name=FormatDateTime'>FormatDateTime    Rich formatting of a TDateTime variable into a string

  href='RTL.asp?Name=FormatFloat'>FormatFloat       Rich formatting of a floating point number into a string

  href='RTL.asp?Name=IntToHex'>IntToHex          Convert an Integer into a hexadecimal string

  href='RTL.asp?Name=IntToStr'>IntToStr          Convert an integer into a string

  href='RTL.asp?Name=Str'>Str               Converts an integer or floating point number to a string

Converting from strings to numbers

  href='RTL.asp?Name=StringToWideChar'>StringToWideChar  Converts a string into a WideChar 0 terminated buffer

  href='RTL.asp?Name=StrToCurr'>StrToCurr         Convert a number string into a currency value

  href='RTL.asp?Name=StrToDate'>StrToDate         Converts a date string into a TDateTime value

  href='RTL.asp?Name=StrToDateTime'>StrToDateTime     Converts a date+time string into a TDateTime value

  href='RTL.asp?Name=StrToFloat'>StrToFloat        Convert a number string into a floating point value

  href='RTL.asp?Name=StrToInt'>StrToInt          Convert an integer string into an Integer value

  href='RTL.asp?Name=StrToInt64'>StrToInt64        Convert an integer string into an Int64 value

  href='RTL.asp?Name=StrToInt64Def'>StrToInt64Def     Convert a string into an Int64 value with default

  href='RTL.asp?Name=StrToIntDef'>StrToIntDef       Convert a string into an Integer value with default

  href='RTL.asp?Name=StrToTime'>StrToTime         Converts a time string into a TDateTime value

  href='RTL.asp?Name=Val'>Val               Converts number strings to integer and floating point values

 

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    >
    как преобразовать Word в String?

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    17.05.02, 20:52

      Подскажите пожалуйста чайнику, как преобразовать переменную типа word в string?


      Булат Шакиров



      Сообщ.
      #2

      ,
      18.05.02, 03:05

        ExpandedWrap disabled

           {Str.PAS}

            {Sample code for the Str procedure.}

            { For Windows: }

            { uses WinCrt; }

            function IntToStr(I: Longint): String;

            { Convert any integer type to a string }

            var

             S: string[11];

            begin

             Str(I, S);

             IntToStr := S;

            end;

            begin

             Writeln(IntToStr(-5322));

             Readln;

            end.


        7in



        Сообщ.
        #3

        ,
        22.05.02, 17:37

          Это называется для чайника?
          Вот: Str(ПеременнаяТипаWord, ПеременнаяТипаString)

          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

          0 пользователей:

          • Предыдущая тема
          • Pascal
          • Следующая тема

          Рейтинг@Mail.ru

          [ Script execution time: 0,0259 ]   [ 15 queries used ]   [ Generated: 14.04.23, 20:16 GMT ]  

          Понравилась статья? Поделить с друзьями:
        • Word and sql server
        • Word and phrase coding
        • Word and spelling games
        • Word and phrase coca
        • Word and spanish accents