Проверка на символ

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Zeke
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 08.02.2005 (Вт) 18:16

Проверка на символ

Сообщение Zeke » 16.06.2005 (Чт) 16:29

Здравствуйте. Такая проблема возникла.
Я из ячейки экселя записываю данные в текстовый файл с помощью макроса. Но когда просматриваю получившийся файл, то в нем в строках проскакивают непонятные символы типа прямоугольничков, палочек разных, то есть как бы из другой кодировки совсем. Но сам эксель эти "скрытые" символы в своих ячейках не отображает.
Как сделать проверку на эти непонятные символы, чтобы не записывать их в файл?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 16.06.2005 (Чт) 16:37

Как записываешь? Код приведи. Конкретно - каким способом открываешь файл и переменные какого типа туда запихиваешь?

JohnCR
Обычный пользователь
Обычный пользователь
 
Сообщения: 75
Зарегистрирован: 14.06.2005 (Вт) 19:03

Сообщение JohnCR » 16.06.2005 (Чт) 16:39

Приведи пример макроса, которым выгружаешь значение ячейки.

Zeke
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 08.02.2005 (Вт) 18:16

Сообщение Zeke » 16.06.2005 (Чт) 16:52

Вот кусок макроса
Код: Выделить всё
Open "C:\file.txt" For Binary As #1
....
Put #1, , CStr("""" + Trim(ActiveSheet.Cells(i, 3).Text) + """" + "," _
                + """" + Trim(ActiveSheet.Cells(i, 2).Text) + """" + "," _
                + Format(ActiveSheet.Cells(i, 5).Text) + "," _
                + Replace(Format(ActiveSheet.Cells(i, 6).Value * 1.18, "0.00"), ",", ".") _
                + "," + """" + Trim(ActiveSheet.Cells(i, 11).Text) + """" + "," _
                + """" + Trim(ActiveSheet.Cells(i, 12).Text) + """" + Chr(13) + Chr(10))
....
Close #1

Эти символы встречаются в данных, взятых из второго столбца, то есть в Trim(ActiveSheet.Cells(i, 2).Text)

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 16.06.2005 (Чт) 17:11

Во первых, такой код нечитаем
Во вторых, ты пишешь не в текстовый файл, а в бинарный
надо открывать так
Код: Выделить всё

Open FileName For Output As #1
Весь мир матрица, а мы в нем потоки байтов!

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 16.06.2005 (Чт) 17:17

!Viper!, вот просто интересно, а как бы ты написал этот код, чтобы он был читаемым?

Zeke, таки да, дело в том, что ты открываешь файл as binary. Либо открывай его так, как советует !Viper!, либо читай хелп по оператору "Put" и его работе с Random и Binary mode.

Zeke
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 08.02.2005 (Вт) 18:16

Сообщение Zeke » 16.06.2005 (Чт) 17:21

!Viper! писал(а):Во первых, такой код нечитаем
Во вторых, ты пишешь не в текстовый файл, а в бинарный
надо открывать так
Код: Выделить всё
Open FileName For Output As #1


Согласен, что не привел код в божеский вид.
Но если я напишу Output вместо Binary, то сразу вылетает run-time error '54' - bad file mode :(

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 16.06.2005 (Чт) 17:37

Так вместо Put, Print и порядок :wink:
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Zeke
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 08.02.2005 (Вт) 18:16

Сообщение Zeke » 16.06.2005 (Чт) 17:48

Igor_123 писал(а):Так вместо Put, Print и порядок :wink:


я уже попробовал и так, но он все равно записывает непонятные символы в текстовый файл, в частности, прямойгольничек, похожий на букву "0", только с прямыми углами :cry:

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 16.06.2005 (Чт) 18:01

uhm писал(а):!Viper!, вот просто интересно, а как бы ты написал этот код, чтобы он был читаемым?


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

Zeke походу тебе попадается что-то типа разделителей ячеек, хотя вроде бы не должны
Весь мир матрица, а мы в нем потоки байтов!

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 16.06.2005 (Чт) 18:03

Это непечатаемые символы.попробуй посмотреть коды этих квадратиков. и позаменять их на пробелы например :D
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Zeke
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 08.02.2005 (Вт) 18:16

Сообщение Zeke » 16.06.2005 (Чт) 18:10

Igor_123 писал(а):Это непечатаемые символы.попробуй посмотреть коды этих квадратиков. и позаменять их на пробелы например :D

А как этот непечатуемый символ в строке найти(я не знаю, как с помошью VB его найти, просто я на VB почти никогда ничего не писал, поэтому все функции подряд просматривать, чтобы найти нужную, не очень хочется)?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 16.06.2005 (Чт) 18:17

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

вариант2: вызывать Asc для последнего (или может быть 2-х последних) символов ячейки типа
Код: Выделить всё
Debug.Print Asc(Right(Trim(ActiveSheet.Cells(i, 3).Text),1))


тока глянь в Help на эти функции, а то чей то у меня от жары мозги плавяться - могу с синтаксисом напутать, а Help смореть ломы
Весь мир матрица, а мы в нем потоки байтов!

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 16.06.2005 (Чт) 18:59

Я проверил, на экселевских данных, введенных ручками, все работает нормально, никаких непечатностей не возникает. Видимо, у тебя в ячейках действительно непечатные символы. Ты, часом, эти данные не из какой-нибудь БД импортируешь?

Zeke
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 08.02.2005 (Вт) 18:16

Сообщение Zeke » 16.06.2005 (Чт) 21:07

!Viper! писал(а):тупой вариант: для каждого символа строки вызывать функцию Asc, а потом смотреть, что за коды символов она выдает.

вариант2: вызывать Asc для последнего (или может быть 2-х последних) символов ячейки типа
Код: Выделить всё
Debug.Print Asc(Right(Trim(ActiveSheet.Cells(i, 3).Text),1))


тока глянь в Help на эти функции, а то чей то у меня от жары мозги плавяться - могу с синтаксисом напутать, а Help смореть ломы


для последнего(-их) смотреть бесполезно, потому что они стоят не в конце, а в середине могут попасться или в начале, поэтому придется всю строку прверять :(

Zeke
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 08.02.2005 (Вт) 18:16

Сообщение Zeke » 16.06.2005 (Чт) 21:08

uhm писал(а):Я проверил, на экселевских данных, введенных ручками, все работает нормально, никаких непечатностей не возникает. Видимо, у тебя в ячейках действительно непечатные символы. Ты, часом, эти данные не из какой-нибудь БД импортируешь?

да я вот тоже думаю, откуда они могли там взяться. Мне этот файл прислали, а как он получился - я не знаю


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 192

    TopList