LemanRass 0 / 0 / 0 Регистрация: 15.04.2013 Сообщений: 8 |
||||
1 |
||||
Как проверить строку на наличие табуляций?09.10.2013, 22:00. Показов 6549. Ответов 8 Метки нет (Все метки)
Собственно, как проверить char строку на наличие табуляции?
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
09.10.2013, 22:00 |
Ответы с готовыми решениями: Как посимвольно проверить строку, взятую из файла, на наличие определенных символов? Как проверить строку на наличие не цифр Как проверить строку Char на наличие цифр? если, например, проверка на то начинается строка… Как проверить строку на наличие определенных символов? Вот у меня, напр., есть текст, и строка из некоторых символов. 8 |
BumerangSP 4299 / 1421 / 463 Регистрация: 16.12.2010 Сообщений: 2,939 Записей в блоге: 3 |
||||||||
09.10.2013, 23:14 |
2 |
|||||||
вместо
0 |
gazlan 3174 / 1933 / 312 Регистрация: 27.08.2010 Сообщений: 5,131 Записей в блоге: 1 |
||||
09.10.2013, 23:42 |
3 |
|||
0 |
0 / 0 / 0 Регистрация: 15.04.2013 Сообщений: 8 |
|
10.10.2013, 10:08 [ТС] |
4 |
А если мне нужно узнать какой именно символ в строке табуляция что бы потом программно заменить его на пробел?
0 |
gazlan 3174 / 1933 / 312 Регистрация: 27.08.2010 Сообщений: 5,131 Записей в блоге: 1 |
||||||||
10.10.2013, 10:40 |
5 |
|||||||
какой именно символ
Добавлено через 1 минуту
программно заменить его на пробел Не дочитал 🙂
0 |
LemanRass 0 / 0 / 0 Регистрация: 15.04.2013 Сообщений: 8 |
||||
10.10.2013, 18:31 [ТС] |
6 |
|||
Такая проверка проверяет строку есть ли там табуляция или нет, но не дает возможности не трогая остальной текст в строке определить где табуляция и просто заменить именно ее а не всю строку в которой есть табуляция.
Суть программы: В каждой строке что вводится с клавиатуры заменять кучу пробелов и табуляций на 1 пробел, и удалять пустые строки.
0 |
3174 / 1933 / 312 Регистрация: 27.08.2010 Сообщений: 5,131 Записей в блоге: 1 |
|
10.10.2013, 19:05 |
7 |
не трогая остальной текст в строке определить где табуляция и просто заменить именно ее Именно это и делается. In place. Без всяких ужасов с STL и копированием.
0 |
LemanRass 0 / 0 / 0 Регистрация: 15.04.2013 Сообщений: 8 |
||||
12.10.2013, 00:17 [ТС] |
8 |
|||
0 |
3174 / 1933 / 312 Регистрация: 27.08.2010 Сообщений: 5,131 Записей в блоге: 1 |
|
12.10.2013, 00:37 |
9 |
в общем, так: Потерял нить… Что именно вам требуется? Подсчет, знание позиции, удаление, замена, еще что-то? И как двумерный массив arr[i][j] связан с проверить char строку на наличие табуляции?
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
12.10.2013, 00:37 |
Помогаю со студенческими работами здесь Как проверить строку с числами на наличие слов или букв? Проверить строку на наличие слов Проверить строку на наличие чисел (0-9) Проверить строку на наличие похожести Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 9 |
i have string
str=”123 456″;
between 3 and 4 there are spaces and tabs ,how can i decern
the spaces from tabs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace ques { public partial class Form1 : Form { public Form1() { InitializeComponent(); pp(); } private void pp() { int i,SumTab, SumSpace, len; string str; char[] characterArray = new char[250]; str = "123 456"; SumTab = 0; SumSpace = 0; len = str.Length; str.CopyTo(0, characterArray, 0, len); for (i = 0; i < str.Length; i++) { if (characterArray[i] == ' ') SumSpace++; else if (characterArray[i] == ' ') SumTab++; else ; } } } }
t
is tab.
if (characterArray[i] == ' ') SumSpace++; else if (characterArray[i] == 't') SumTab++;
You can also use linq:
public int CharCount(char character, string myString) { int count = (from c in myString where c == character select c).Count(); return count; }
And call it like this:
int spaceCount = CharCount(' ', "123 456"); int tabCount = CharCount('t', "123 456");
You can also do it this way if you don’t like (or can’t use) LINQ:
public int CharCount(char character, string myString) { int count = 0; int pos = 0; do { pos = myString.IndexOf(character, pos); if (pos >= 0) { count++; } } while (pos >= 0); return count; }
If you trying to find the number of spaces and tabs quickly, with no worry for optimization, another way to do is, utilize the exiting method of String.Split[^]
String.Split will return an array of strings with the split strings based on your criteria, then you need to count your array size and your are done.
str = "123 456"; string [] split = str.Split(new Char [] {' '}); spaces = split.Length - 1
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)
Как распознать табуляцию при чтении файла?
Здравствуйте. Помогите пожалуйста решить проблему.
Считываю построчно файл. Хочу чтобы когда в файле наступает конец строки, выводился пробел.
while (scanner.hasNext()) {
string=scanner.next();
if(string=="t")
string1=string1+" ";
else
string1=string1+string;
}
System.out.println(string);
Однако не могу выловить эту самую табуляцию.
-
Вопрос заданболее трёх лет назад
-
1441 просмотр
Сергей, например
boolean a = false;
for (int i = 0; i < string.length(); i++) {
if (string.charAt(i) == 'r') {
a = true;
break;
}
}
if (a==true)
{string1 = string1 + string+" ";a=false;}
else
string1 = string1 + string;
// System.out.println(string);
}
Не отлавливает конец строки
Пригласить эксперта
” ” (ASCII 32 (0x20)), обычный пробел.
“t” (ASCII 9 (0x09)), символ табуляции.
“n” (ASCII 10 (0x0A)), символ перевода строки.
“r” (ASCII 13 (0x0D)), символ возврата каретки.
“” (ASCII 0 (0x00)), NUL-байт.
“x0B” (ASCII 11 (0x0B)), вертикальная табуляция.
-
Показать ещё
Загружается…
22 мая 2023, в 18:02
3000 руб./в час
24 мая 2023, в 16:29
1200 руб./в час
24 мая 2023, в 16:05
2000 руб./за проект
Минуточку внимания
← →
z3f
(2004-05-30 17:35)
[0]
Глупый вопрос конечно, но я не могу его решить.=(
Есть текстовый файл с разделителями в строках (символ табуляции). После табуляции стоят числа.
Файл:
1. Опа 232425 руб
2. Ага 7678890 руб
Сумма ?
Нужно выловить числа и сосчитать сумму.
Вопрос простой, ноя не могу вспомнить как определить символ табуляции и наличие пробела (в принципе пробел это st=” “??).
А вот как быть с табуляцией?
С уважением z3f.
← →
Gero ©
(2004-05-30 17:38)
[1]
#9
← →
z3f
(2004-05-30 18:37)
[2]
Еще вопрос в принципе по тому же поводу=(
Код:
Repeat
while not EOLN(f_old) do
begin
read (f_old,ch);
write (f_new,ch);
stf:=” “;
if ch=#9 then
begin
while ch<>” ” do
begin
read(f_old,ch);
stf:=stf+ch;
end;
write (f_new,stf);
val(stf,m,j);
setlength (a,i);
a[i]:=m;
inc(i);
end;
end;
writeln(f_new);
readln(f_old);
Until eof(f_old);
ch – переменная типа char
stf – переменная типа string
по первому проходу по строке(когда находит число) отлично сохранняет в массиве числовое значение.
по второму проходу когда натыкается на число проиходит ошибка в выделенной строке.
Не подскажите в чем проблема?
← →
Gero ©
(2004-05-30 18:42)
[3]
Ужасный код…
Как объявлены f_old и f_new?
Что вобще этот код должен сделать в процессе работы?
← →
z3f
(2004-05-30 18:53)
[4]
Код:
procedure TForm2.Button1Click(Sender: TObject);
var f_old, f_new : TextFile; // f_new – test_new.txt, f_old – test.txt
st,str,stf : string;
a: array of Integer;
i,j,m: Integer;
ch: char;
begin
if FileExists(“test_new.txt”) then // если новый файл есть – тады удаляем его
begin
AssignFile(f_new,”test_new.txt”);
Reset(f_new);
CloseFile(f_new);
Erase(f_new);
end;
// создаем новый файл с именем test_new.txt
AssignFile(f_new,”test_new.txt”);
AssignFile(f_old,”test.txt”);
ReSet(f_old); //только читаем test.txt
ReWrite(f_new); //пишем в файл test_new.txt
i:=1;
//обрабатываем исходный файл и результат обработки записываем в новый файл
Repeat
while not EOLN(f_old) do
begin
read (f_old,ch);
write (f_new,ch);
stf:=””;
if ch=#9 then
begin
while ch<>” ” do
begin
read(f_old,ch);
stf:=stf+ch;
end;
write (f_new,stf);
val(stf,m,j);
setlength (a,i);
a[i]:=m;
inc(i);
end;
end;
writeln(f_new);
readln(f_old);
Until eof(f_old);
//конец обработки исходного файла
CloseFile (f_old);
CloseFile (f_new);
Form1.Show; // показываем окно с результатами
Form2.Hide; // прячем окно с исходным текстом
end;
Задача такая – есть текстовый файл вида:
Справка за июль месяц.
Стоимость по одному виду 23434 тыс руб
Стоимость по второму виду 938 тыс руб
Стоимость по третьему виду 23 тыс руб
Сумма 26 тыс руб
Требуется сосчитать сумму нечетных значений.
Упростил на данный момент – просто сосчитать сумму всех значений и соответственно вывести в новый файл (test_new.txt).
Выгребаю все числа из строчек (плевать – даже сумму на первом этапе)и закидываю их в массив (a[i]).
Все нормально по первому проходу.
После него a[1]=23434
stf=23434.
потом stf=””становится.
И когда второй раз программа набредает на число(в данном случае 9) ломается на фразе stf:=stf+ch.
Вот такая проблема.
С уважением z3f.
← →
Gero ©
(2004-05-30 19:13)
[5]
function GetFileSum(FName : string) : Integer;
var
S : string;
i : Integer;
begin
Result := 0;
with TStringList.Create do
try
LoadFromFile(FName);
for i := 0 to Count -1 do
begin
S := Strings[i];
S := Copy(S, Pos(#9, S) + 1, Length(S) - Pos(#9, S));
S := Copy(S, 1, Pos($20, S) - 1);
Result := Result + StrToIntDef(S, 0);
end;
finally
Free;
end;
end;
Не проверял..
← →
z3f
(2004-05-30 19:32)
[6]
[Ошибка] Proba_bank_2.pas(45): Incompatible types
[Ошибка] Proba_bank_2.pas(95): Undeclared identifier: “Count”
[Ошибка] Proba_bank_2.pas(96): Missing operator or semicolon
[Ошибка] Proba_bank_2.pas(16): Unsatisfied forward or external declaration: “TForm2.GetFileSum”
[Фатальная ошибка] Proba_bank_prj.dpr(6): Could not compile used unit “Proba_bank_2.pas”
Это вот такое выдается=)
Проблема в том что нужно каком образом(правльным) добавлять к string переменную типа char. Я по ходу это делаю неправильно! (по моему).
Кроме того нужно выполнять еще массу операций над числами – это не единственное что нужно сделать. Поэтому нужно забивать таким образом массив (просто с ним в итоге будет проще работать!).
Может есть какое-либо другое решение?
Помогите!
С уважением z3f.
← →
Gero ©
(2004-05-30 19:50)
[7]
Блин, ну что подумать совсем никак?
Или F1 нажать?
var A : array of Integer;
procedure FillArray(FName : string);
var
S : string;
i, NumCount : Integer;
begin
with TStringList.Create do
try
LoadFromFile(FName);
SetLength(A, Count);
NumCount := 0;
for i := 0 to Count -1 do
begin
S := Strings[i];
S := Copy(S, Pos(#9, S) + 1, Length(S) – Pos(#9, S));
S := Copy(S, 1, Pos(” “, S) – 1);
A[NumCount] := StrToIntDef(S, -1);
if A[NumCount] > -1 then Inc(NumCount);
end;
finally
Free;
end;
end;
Код, правда, далеко не идеален, но будет работать.
← →
z3f
(2004-05-30 20:53)
[8]
Послушался Вашего совета Gero.
Все работает=) Практически=)
Проходит практически весь файл но на очередно readln – дохнет.=(
Тектовый файл:
Справка за июль месяц.
Стоимость по одному виду 23434 тыс руб
Стоимость по второму виду 938 тыс руб
Стоимость по третьему виду 23 тыс руб
Стоимость по четвертому виду 4895 тыс руб
Сумма 26 тыс рубл
Когда доходит до строки Сумма 26 тыс рубл – readln – дохнет=(
Говорит – invalid pointer=(
КОД:
procedure TForm2.Button1Click(Sender: TObject);
var F_OLD, F_NEW : TextFile; // f_new – test_new.txt, f_old – test.txt
st : string;
a : array of Integer;
i : Integer;
begin
AssignFile(F_NEW,”test_new.txt”);
AssignFile(F_OLD,”test.txt”);
ReSet(F_OLD); //только читаем test.txt
ReWrite(F_NEW); //пишем в файл test_new.txt
i:=1;
Repeat
Readln(F_OLD, st); //здесь дохнем с ошибкой Invalid Pointer=(
St := Copy(St,Pos(#9,St)+1,Length(St)-Pos(#9,St));
St := Copy(St,1,Pos(” “,St)-1);
SetLength(A, i);
A[i] := StrToIntDef(St, -1);
if A[i]>-1 then
begin
writeln(F_NEW,a[i]);
Inc(i);
end;
Until eof(F_OLD);
CloseFile(F_OLD);
CloseFile(F_NEW);
Form2.Hide; // прячем окно с исходным текстом
Form1.Show; // показываем окно с результатами
end;
Помогите еще раз опжалуйста!
С уважением z3f.
← →
GEN++ ©
(2004-05-30 21:36)
[9]
>z3f
А что мешает загрузить входной файл в StringList1 далее
обрабатывать каждую строку и результат писать в StringList2,
по окончании операции сохранять StringList2 в файле.
← →
Anatoly Podgoretsky ©
(2004-05-30 21:45)
[10]
Gero © (30.05.04 19:50) [7]
Ну парень ты влетел 🙂
← →
z3f
(2004-05-30 22:04)
[11]
Да не влетел он=)
Он все правльно написал – я просто не захотел вникнуть в код и разбираться с кодом который написал Gero ©=)
А он все правильно написал=)
Проcто после его кода я внимательно почитал что выдает F1 на каждую из им написанных функций и все понял.
Пришлось немного адаптировать под себя и все – заработало!!!!!
Всем громадное спасибо за помощь!!!
С уважением z3f.
In HTML, there is no character for a tab, but I am confused as to why I can copy and paste one here: ” ” (You can’t see the full width of it, but if you click to edit my question, you will see the character.) If I can copy and paste a tab character, there should be a unicode equivalent that can be coded into html. I know it doesn’t exist, but this is a mystery I’ve never been able to grasp.
So my question is: why is there not a unicode character for a tab even if I can copy and paste it?
MestreLion
12.5k6 gold badges66 silver badges57 bronze badges
asked Mar 12, 2012 at 2:21
Abbey GraebnerAbbey Graebner
1,7972 gold badges10 silver badges8 bronze badges
3
Try  
as per the docs :
The character entities
 
and 
denote an en space and an em
space respectively, where an en space is half the point size and an em
space is equal to the point size of the current font. For fixed pitch
fonts, the user agent can treat the en space as being equivalent to A
space character, and the em space as being equuivalent to two space
characters.
Docs link : https://www.w3.org/MarkUp/html3/specialchars.html
answered May 5, 2016 at 7:35
Abhishek GoelAbhishek Goel
18.5k11 gold badges86 silver badges65 bronze badges
0
put it in between <pre></pre>
tags then use this characters
it would not work without the <pre></pre>
tags
answered Mar 12, 2012 at 2:28
RaymundRaymund
7,5995 gold badges44 silver badges78 bronze badges
4
Posting another alternative to be more complete. When I tried the “pre” based answers, they added extra vertical line breaks as well.
Each tab can be converted to a sequence non-breaking spaces which require no wrapping.
" "
This is not recommended for repeated/extensive use within a page. A div margin/padding approach would appear much cleaner.
answered Oct 20, 2014 at 22:19
crokusekcrokusek
5,2752 gold badges43 silver badges60 bronze badges
1
I use <span style="display: inline-block; width: 2ch;"> </span>
for a two characters wide tab.
answered May 7, 2017 at 13:29
GrayFaceGrayFace
1,1689 silver badges12 bronze badges
1
Tab is [HT], or character number 9, in the unicode library.
answered Mar 12, 2012 at 2:26
DanReduxDanRedux
9,0396 gold badges23 silver badges41 bronze badges
As mentioned, for efficiency reasons sequential spaces are consolidated into one space the browser actually displays. Remember what the ML in HTML stand for. It’s a Mark-up Language, designed to control how text is displayed.. not whitespace :p
Still, you can pretend the browser respects tabs since all the TAB does is prepend 4 spaces, and that’s easy with CSS. either in line like …
<div style="padding-left:4.00em;">Indenented text </div>
Or as a regular class in a style sheet
.tabbed {padding-left:4.00em;}
Then the HTML might look like
<p>regular paragraph regular paragraph regular paragraph</p>
<p class="tabbed">Indented text Indented text Indented text</p>
<p>regular paragraph regular paragraph regular paragraph</p>
answered Jan 9, 2018 at 22:03
Duane LortieDuane Lortie
1,2751 gold badge12 silver badges16 bronze badges
1