473,322 Members | 1,526 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,322 software developers and data experts.

A function for a generic STL container

Hi I want to write a function which erases al the repeated elements in a
range. How should be the prototype?

template <class Iterator>
void eraseRepeated(Iterator begin, Iterator end);

doesn't work because I need the container to write: container.erase(p),
where p is an iterator.
Jul 23 '05 #1
19 2214
* Nafai:
Hi I want to write a function which erases al the repeated elements in a
range. How should be the prototype?

template <class Iterator>
void eraseRepeated(Iterator begin, Iterator end);

doesn't work because I need the container to write: container.erase(p),
where p is an iterator.


Check out std::unique.

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
Jul 23 '05 #2
Alf P. Steinbach escribió:
* Nafai:
Hi I want to write a function which erases al the repeated elements in a
range. How should be the prototype?

template <class Iterator>
void eraseRepeated(Iterator begin, Iterator end);

doesn't work because I need the container to write: container.erase(p),
where p is an iterator.

Check out std::unique.


Unique only erases consecutive elements. I want to erase all of them.
And I don't want to sort them.

But above all I would like to know how to program a function like that,
which can get any container and do something with its iterators.
Jul 23 '05 #3

Nafai wrote:
Alf P. Steinbach escribió:
* Nafai:
Hi I want to write a function which erases al the repeated elements in a range. How should be the prototype?

template <class Iterator>
void eraseRepeated(Iterator begin, Iterator end);

doesn't work because I need the container to write: container.erase(p),where p is an iterator.

Check out std::unique.


Unique only erases consecutive elements. I want to erase all of them.

And I don't want to sort them.

But above all I would like to know how to program a function like that, which can get any container and do something with its iterators.

No such function exists because different containers have different
"erase" semantics. For example, an algorithm that erases sequential
iterators may work for one container, but may yield undefined behavior
for another. The best you can do is to copy the range, remove the
range, and then add back unique (or non-repeated) elements from the
copied data, but this is very inefficient. /david

Jul 23 '05 #4
* Nafai:
Alf P. Steinbach escribió:
* Nafai:
Hi I want to write a function which erases al the repeated elements in a
range. How should be the prototype?

template <class Iterator>
void eraseRepeated(Iterator begin, Iterator end);

doesn't work because I need the container to write: container.erase(p),
where p is an iterator.

Check out std::unique.


Unique only erases consecutive elements. I want to erase all of them.
And I don't want to sort them.


I don't think you understand the requirements.

Some way of identifying an element as duplicate is needed.

If not consecutive, and no sorting, you'll need to register elements in
a hash table or something like that.

But above all I would like to know how to program a function like that,
which can get any container and do something with its iterators.


See std::unique.

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
Jul 23 '05 #5
Alf P. Steinbach wrote:

Some way of identifying an element as duplicate is needed.


A and B are duplicate if and only if A==B.
Jul 23 '05 #6
Alf P. Steinbach wrote:
* Nafai:
Alf P. Steinbach escribió:
> * Nafai:
>
>>Hi I want to write a function which erases al the repeated elements in
>>a
>> range. How should be the prototype?
>>
>>template <class Iterator>
>>void eraseRepeated(Iterator begin, Iterator end);
>>
>>doesn't work because I need the container to write: container.erase(p),
>>where p is an iterator.
>
>
> Check out std::unique.
>


Unique only erases consecutive elements. I want to erase all of them.
And I don't want to sort them.


I don't think you understand the requirements.

Some way of identifying an element as duplicate is needed.

If not consecutive, and no sorting, you'll need to register elements in
a hash table or something like that.

But above all I would like to know how to program a function like that,
which can get any container and do something with its iterators.


See std::unique.


Let's see. It's quite simple. I have a collection C (ie. list or vector):
C=(1 4 4 2 1 1 4) and I get: C'=(1 4 2)

The algorithm is just this:

insert all elements of C into a set.

iterate through C and check if each element is in the set.
If it is, erase it from the set.
If it isn't erase it from C.

Or even more simpler (and suitable for any collection):

....
If it is, erase it from the set and insert it into C'.
If it isn't do nothing.
I just need to know how to declare the prototype!! ("template"...)

Jul 23 '05 #7
Nafai wrote:
Alf P. Steinbach wrote:
* Nafai:
Alf P. Steinbach escribió:
> * Nafai:
>
>>Hi I want to write a function which erases al the repeated elements in >>a
>> range. How should be the prototype?
>>
>>template <class Iterator>
>>void eraseRepeated(Iterator begin, Iterator end);
>>
>>doesn't work because I need the container to write: container.erase(p), >>where p is an iterator.
>
>
> Check out std::unique.
>

Unique only erases consecutive elements. I want to erase all of them. And I don't want to sort them.


I don't think you understand the requirements.

Some way of identifying an element as duplicate is needed.

If not consecutive, and no sorting, you'll need to register elements in a hash table or something like that.

But above all I would like to know how to program a function like that, which can get any container and do something with its iterators.


See std::unique.


Let's see. It's quite simple. I have a collection C (ie. list or
vector):
C=(1 4 4 2 1 1 4) and I get: C'=(1 4 2)

The algorithm is just this:

insert all elements of C into a set.

iterate through C and check if each element is in the set.
If it is, erase it from the set.
If it isn't erase it from C.

Or even more simpler (and suitable for any collection):

...
If it is, erase it from the set and insert it into C'.
If it isn't do nothing.
I just need to know how to declare the prototype!! ("template"...)


Does this suit you?

template <class T>
void eraseRepeated(T &container);

Kristo

Jul 23 '05 #8
Kristo escribió:
Nafai wrote:
Alf P. Steinbach wrote:

* Nafai:

Alf P. Steinbach escribió:

>* Nafai:
>
>
>>Hi I want to write a function which erases al the repeated
elements in
a
>> range. How should be the prototype?
>>
>>template <class Iterator>
>>void eraseRepeated(Iterator begin, Iterator end);
>>
>>doesn't work because I need the container to write:
container.erase(p),
where p is an iterator.
>
>
>Check out std::unique.
>

Unique only erases consecutive elements. I want to erase all of
them.
And I don't want to sort them.

I don't think you understand the requirements.

Some way of identifying an element as duplicate is needed.

If not consecutive, and no sorting, you'll need to register
elements in
a hash table or something like that.

But above all I would like to know how to program a function like
that,
which can get any container and do something with its iterators.

See std::unique.


Let's see. It's quite simple. I have a collection C (ie. list or
vector):
C=(1 4 4 2 1 1 4) and I get: C'=(1 4 2)

The algorithm is just this:

insert all elements of C into a set.

iterate through C and check if each element is in the set.
If it is, erase it from the set.
If it isn't erase it from C.

Or even more simpler (and suitable for any collection):

...
If it is, erase it from the set and insert it into C'.
If it isn't do nothing.
I just need to know how to declare the prototype!! ("template"...)

Does this suit you?

template <class T>
void eraseRepeated(T &container);

Kristo


No, it doesn't. This doesn't work:

template <class T>
void f(T& Container)
{
T::iterator it; // <- parse error before token ';'
it = Container.begin();
....
}
Jul 23 '05 #9
Nafai wrote:
Kristo escribió:
Nafai wrote:

Let's see. It's quite simple. I have a collection C (ie. list or
vector):
C=(1 4 4 2 1 1 4) and I get: C'=(1 4 2)

The algorithm is just this:

insert all elements of C into a set.

iterate through C and check if each element is in the set.
If it is, erase it from the set.
If it isn't erase it from C.

Or even more simpler (and suitable for any collection):

...
If it is, erase it from the set and insert it into C'.
If it isn't do nothing.
I just need to know how to declare the prototype!! ("template"...)

Does this suit you?

template <class T>
void eraseRepeated(T &container);

Kristo


No, it doesn't. This doesn't work:

template <class T>
void f(T& Container)
{
T::iterator it; // <- parse error before token ';'
it = Container.begin();
...
}


That's because you forgot the typename keyword. The compiler has no
other way of knowing that T::iterator is a type.

typename T::iterator it;

Kristo

Jul 23 '05 #10
Kristo wrote:
Nafai wrote:
Kristo escribió:
> Nafai wrote:
>>
>>Let's see. It's quite simple. I have a collection C (ie. list or
>>vector):
>>C=(1 4 4 2 1 1 4) and I get: C'=(1 4 2)
>>
>>The algorithm is just this:
>>
>>insert all elements of C into a set.
>>
>>iterate through C and check if each element is in the set.
>>If it is, erase it from the set.
>>If it isn't erase it from C.
>>
>>Or even more simpler (and suitable for any collection):
>>
>>...
>>If it is, erase it from the set and insert it into C'.
>>If it isn't do nothing.
>>
>>
>>I just need to know how to declare the prototype!! ("template"...)
>
>
> Does this suit you?
>
> template <class T>
> void eraseRepeated(T &container);
>
> Kristo
>


No, it doesn't. This doesn't work:

template <class T>
void f(T& Container)
{
T::iterator it; // <- parse error before token ';'
it = Container.begin();
...
}


That's because you forgot the typename keyword. The compiler has no
other way of knowing that T::iterator is a type.

typename T::iterator it;

Kristo


But I also have to know the type of elements that contains "Container".

For example, if T=list<T2>, I need to declare a std::set<T2> as a local
variable:

template <class T>
void f(T& Container)
{
std::set<????> s;
typename T::iterator it;
...
}
Jul 23 '05 #11
Nafai wrote:
Kristo wrote:
Nafai wrote:
Kristo escribió:
> Nafai wrote:
>>
>>Let's see. It's quite simple. I have a collection C (ie. list or
>>vector):
>>C=(1 4 4 2 1 1 4) and I get: C'=(1 4 2)
>>
>>The algorithm is just this:
>>
>>insert all elements of C into a set.
>>
>>iterate through C and check if each element is in the set.
>>If it is, erase it from the set.
>>If it isn't erase it from C.
>>
>>Or even more simpler (and suitable for any collection):
>>
>>...
>>If it is, erase it from the set and insert it into C'.
>>If it isn't do nothing.
>>
>>
>>I just need to know how to declare the prototype!! ("template"...)
>
>
> Does this suit you?
>
> template <class T>
> void eraseRepeated(T &container);
>
> Kristo
>

No, it doesn't. This doesn't work:

template <class T>
void f(T& Container)
{
T::iterator it; // <- parse error before token ';'
it = Container.begin();
...
}


That's because you forgot the typename keyword. The compiler has no
other way of knowing that T::iterator is a type.

typename T::iterator it;

Kristo


But I also have to know the type of elements that contains "Container".

For example, if T=list<T2>, I need to declare a std::set<T2> as a local
variable:

template <class T>
void f(T& Container)
{
std::set<????> s;
typename T::iterator it;
...
}


Here is my final solution. Any suggestion to improve it?

template <class T, class Container>
void eraseRepeated(Container& c)
{
std::set<T> s;
typename Container::iterator itc;
for(itc=c.begin();itc!=c.end();++itc)
{
s.insert(*itc);
}

typename std::set<T>::iterator its;

itc=c.begin();
while(itc!=c.end())
{
its=s.find(*itc);
if(its!=s.end())
{
s.erase(its);
itc++;
}
else
{
itc=c.erase(itc);
}
}
}
Example of use:

int main()
{
std::list<int> l(3,3);
l.push_back(5);l.push_back(3);l.push_back(2);l.pus h_back(5);

std::vector<char> v;
v.push_back('a');v.push_back('b');
v.push_back('a');v.push_back('a');
v.push_back('c');v.push_back('b');

copy(l.begin(),l.end(),ostream_iterator<int>(cout, " "));
cout << endl;

eraseRepeated< int, list<int> >(l); // ANY WAY TO MAKE IT SIMPLER?:
// eraseRepeated< list<int> >(l); for example.

copy(l.begin(),l.end(),ostream_iterator<int>(cout, " "));
cout << endl;

copy(v.begin(),v.end(),ostream_iterator<char>(cout , " "));
cout << endl;
eraseRepeated< char, vector<char> >(v);
copy(v.begin(),v.end(),ostream_iterator<char>(cout , " "));
cout << endl;
}

Output:

3 3 3 5 3 2 5
3 5 2
a b a a c b
a b c

Jul 23 '05 #12

Nafai wrote:
Here is my final solution. Any suggestion to improve it?

template <class T, class Container>
void eraseRepeated(Container& c)
{
std::set<T> s;
typename Container::iterator itc;
for(itc=c.begin();itc!=c.end();++itc)
{
s.insert(*itc);
}

typename std::set<T>::iterator its;

itc=c.begin();
while(itc!=c.end())
{
its=s.find(*itc);
if(its!=s.end())
{
s.erase(its);
itc++;
}
else
{
itc=c.erase(itc);
}
}
}


You cannot call 'c.erase' while looping over 'c' with
'Container::iterator's as this invalidates 'itc' in some cases causing
'itc++' to produce undefined behavior. Furthermore, not all containers
(e.g., Associative Containers) return a valid iterator from 'erase'.

It seems like you want to sort 'c', copy unique elements to a temporary
'Container' object, 'c2', and then 'swap' between 'c' and 'c2'.

You can even better performance if you tmplatize on container type
*and* element type. Then you can specialize for sorted containers by
simply copying repeated elements into a second container of the same
type and finally calling 'swap' to get the result back into the
original container.

In any case, except where radix-sort is appropriate (again, a
specialization), any solution is going to be O(n log n).

/david

Jul 23 '05 #13
You should very carefully consider whether or not you really don't want
to use std::unique(). Here are the unsorted_unique() and related
algorithms from my STL Extensions library, and it does what I believe
you want done. But it is extremely expensive. Choose your tools
wisely.

/* ---

25.2.8
template< class ForwardIterator, class OutputIterator, class
BinaryPredicate>
OutputIterator unsorted_unique_copy(ForwardIterator first,
InputIterator last, OutputIterator result, BinaryPredicate pred)

template< class ForwardIterator, class OutputIterator>
OutputIterator unsorted_unique_copy(ForwardIterator first,
InputIterator last, OutputIterator result)

template< class ForwardIterator, class OutputIterator, class
BinaryPredicate>
ForwardIterator unsorted_unique(ForwardIterator first,
ForwardIterator last, OutputIterator result, BinaryPredicate pred)

template< class ForwardIterator, class OutputIterator>
ForwardIterator unsorted_unique(ForwardIterator first,
ForwardIterator last, OutputIterator result)

Requires :

The ranges [first, last) and [result, result+last-first) shall not
overlap

Effects :

Eliminates all but the first occurance of any element referred to by
the iterator i in the range [first, last).
The range [first, last) does not need to be sorted before executing
unsorted_unique_copy.

Complexity :

If the range [first, last) is not empty, (n^2 + n) / 2 applications
of the comparison predicate or operator.
Otherwise, no applications of the predicate.

Returns :

The end of the resulting range.

--- */

template< class ForwardIterator, class OutputIterator, class
BinaryPredicate>
OutputIterator unsorted_unique_copy(ForwardIterator first,
ForwardIterator last, OutputIterator result, BinaryPredicate pred)
{
for( ForwardIterator current = first; current != last; ++current )
{
// make sure this item isnt repeated previously in the source range
if( current == find_if(first, current, bind1st(pred,*current)) )
// wasn't found, add to destination range
*result++ = *current;
}
return result;
}

template< class ForwardIterator, class OutputIterator>
OutputIterator unsorted_unique_copy(ForwardIterator first,
ForwardIterator last, OutputIterator result)
{
for( ForwardIterator current = first; current != last; ++current )
{
// make sure this item isnt repeated previously in the source range
if( current == find(first, current, *current) )
// wasn't found, add to destination range
*result++ = *current;
}
return result;
}

template< class BidirectionalIterator> inline
BidirectionalIterator unsorted_unique(BidirectionalIterator first,
BidirectionalIterator last)
{
for( ; first != last; ++first )
{
BidirectionalIterator current = first;
for( ++current; current != last; )
{
if( *first == *current )
{
BidirectionalIterator rotend(current);
++rotend;
rotate(current,rotend,last--);
}
else
++current;
}
}
return last;
}

template< class BidirectionalIterator, class BinaryPredicate>
BidirectionalIterator unsorted_unique(BidirectionalIterator first,
BidirectionalIterator last, BinaryPredicate pred)
{
for( ; first != last; ++first )
{
BidirectionalIterator current(first);
for( current++; current != last; )
{
if( pred(*first, *current) )
{
BidirectionalIterator rotend(current);
rotend++;
rotate(current,rotend,last--);
}
else
++current;
}
}
return last;
}

</dib>

Jul 23 '05 #14
Nafai wrote:

But I also have to know the type of elements that contains "Container".

For example, if T=list<T2>, I need to declare a std::set<T2> as a local
variable:

template <class T>
void f(T& Container)
{
std::set<????> s;
typename T::iterator it;
...
}


How about this:

template <typename Container>
void eraseRepeated(Container& c)
{
typedef typename Container::value_type T;

std::set<T> s;
typename Container::iterator iter;

// ...
}
Jul 23 '05 #15
Nafai wrote:
Let's see. It's quite simple. I have a collection C (ie. list or
vector):
C=(1 4 4 2 1 1 4) and I get: C'=(1 4 2)

The algorithm is just this:

insert all elements of C into a set.


One thing I forgot to mention: this step is O(n log n), so you're not
gaining anything over sorting and then calling std::unique.

[snip the rest of the algorithm]

Kristo

Jul 23 '05 #16
da********@warpmail.net escribió:
Nafai wrote:

Here is my final solution. Any suggestion to improve it?

template <class T, class Container>
void eraseRepeated(Container& c)
{
std::set<T> s;
typename Container::iterator itc;
for(itc=c.begin();itc!=c.end();++itc)
{
s.insert(*itc);
}

typename std::set<T>::iterator its;

itc=c.begin();
while(itc!=c.end())
{
its=s.find(*itc);
if(its!=s.end())
{
s.erase(its);
itc++;
}
else
{
itc=c.erase(itc);
}
}
}

You cannot call 'c.erase' while looping over 'c' with
'Container::iterator's as this invalidates 'itc' in some cases causing
'itc++' to produce undefined behavior. Furthermore, not all containers
(e.g., Associative Containers) return a valid iterator from 'erase'.


For lists and vectors it works. And after calling c.erase(itc) I dont
write itc++, I do that after s.erase(its).
It seems like you want to sort 'c', copy unique elements to a temporary
'Container' object, 'c2', and then 'swap' between 'c' and 'c2'.
I don't want to sort c. That's because I don't sort and use unique.

For example:
I want: 3 1 3 2 3 2 --> 3 1 2
but not: 3 3 2 3 2 --> 1 2 2 3 3 3 --> 1 2 3
You can even better performance if you tmplatize on container type
*and* element type.
How do I do that?:

template < class T, class Container<T> >
void f(Container<T>& c);
....
f<int>(L);

or...

template < class T, class Container >
void f(Container& c);
....
f< int, list<int> >(L);

?
In any case, except where radix-sort is appropriate (again, a
specialization), any solution is going to be O(n log n).

/david

Jul 23 '05 #17
Kristo escribió:
Nafai wrote:
Let's see. It's quite simple. I have a collection C (ie. list or
vector):
C=(1 4 4 2 1 1 4) and I get: C'=(1 4 2)

The algorithm is just this:

insert all elements of C into a set.

One thing I forgot to mention: this step is O(n log n), so you're not
gaining anything over sorting and then calling std::unique.

[snip the rest of the algorithm]

Kristo


But I don't want the elements to get sorted!

For example:
I want: 3 1 3 2 3 2 --> 3 1 2
but not: 3 3 2 3 2 --> 1 2 2 3 3 3 --> 1 2 3
Jul 23 '05 #18

Nafai wrote:
da********@warpmail.net escribió:
Nafai wrote:

Here is my final solution. Any suggestion to improve it?

[snip] You cannot call 'c.erase' while looping over 'c' with
'Container::iterator's as this invalidates 'itc' in some cases causing 'itc++' to produce undefined behavior. Furthermore, not all containers (e.g., Associative Containers) return a valid iterator from 'erase'.

For lists and vectors it works. And after calling c.erase(itc) I dont write itc++, I do that after s.erase(its).
This is not useful to OP who asked about a solution given a generic
container.

The point about iterators and erase is that you can't always execute
'itc++' after executing 'c.erase(itc)', notwithstanding the fact that
not all container types return an iterator from 'erase'.
It seems like you want to sort 'c', copy unique elements to a temporary 'Container' object, 'c2', and then 'swap' between 'c' and 'c2'.


I don't want to sort c. That's because I don't sort and use unique.


Your example does not use 'unique'...
For example:
I want: 3 1 3 2 3 2 --> 3 1 2
but not: 3 3 2 3 2 --> 1 2 2 3 3 3 --> 1 2 3


....and 'unique' does not work this way. It requires an ordered
collection to be effective for the pupose stated by OP.
You can even better performance if you tmplatize on container type
*and* element type.


How do I do that?:


With either two template parameters or a template-template parameter.

/david

Jul 23 '05 #19
Nafai wrote:
Kristo escribió:
Nafai wrote:
Let's see. It's quite simple. I have a collection C (ie. list or
vector):
C=(1 4 4 2 1 1 4) and I get: C'=(1 4 2)

The algorithm is just this:

insert all elements of C into a set.

One thing I forgot to mention: this step is O(n log n), so you're not gaining anything over sorting and then calling std::unique.

[snip the rest of the algorithm]

Kristo


But I don't want the elements to get sorted!

For example:
I want: 3 1 3 2 3 2 --> 3 1 2
but not: 3 3 2 3 2 --> 1 2 2 3 3 3 --> 1 2 3


Whoops, that's right, you said that. I came up with an O(n^2)
algorithm that might work for you. It uses the prototype you initially
rejected. I'm sure you could modify it to suit your needs.

/* begin foo.cpp */
#include <algorithm>
#include <iostream>
#include <iterator>
#include <ostream>
#include <vector>

template <class Iterator>
Iterator eraseRepeated(Iterator begin, Iterator end)
{
for (Iterator i = begin; i != end;)
{
Iterator prev = i++;
end = std::remove(i, end, *prev);
}

return end;
}

int main()
{
int a[] = {3, 1, 3, 2, 3, 2};

int *e = eraseRepeated(a, a+5);
std::copy(a, e, std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;

return 0;
}
/* end foo.cpp */

The output from this program is:
3 1 2

Hope this helps.

Kristo

Jul 23 '05 #20

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
by: Stewart Rogers | last post by:
Hi all, I have been working on an ASP.NET application that is a kind of wizard ( a list of sequential pages ). We built that application for the CLIENT-A and it worked fine. After six months...
2
by: Luc Claustres | last post by:
I have a generic container such as: template<class T> class Container { // some data structure that store elements of type T } I use this container in a hierarchical manner, that is...
1
by: Anton Pervukhin | last post by:
Hi everybody! While trying to implement a generic sorting function which takes a member function(on which base the actual sort happens) as a parameter, I have met the problem that I need to use...
7
by: Alfonso Morra | last post by:
I have written a class, and several of it's methods are function templates. When I compiled the code, I realized that I had made some typos in the code - but the compiler seemed to skip right over...
4
by: Anders | last post by:
Hi, I was wondering what is most efficient of the two. Is it more efficient to add server controls within the Itemtemplate and use OnItemDataBound to manipulate and databind the servercontrols. ...
4
by: Mitchel Haas | last post by:
Hello, Feeling a need for a generic tree container to supplement the available containers in the STL, I've created a generic tree container library (TCL). The library usage is very much like...
18
by: Robbie Hatley | last post by:
A couple of days ago I dedecided to force myself to really learn exactly what "strtok" does, and how to use it. I figured I'd just look it up in some book and that would be that. I figured...
4
by: Terence Wilson | last post by:
I'm having trouble designing a container for all the basic types(char, int, float, double). The container should be able to hold contiguous arrays of type T. I would like some kind of generic...
6
by: RandomElle | last post by:
Hi there I'm hoping someone can help me out with the use of the Eval function. I am using Access2003 under WinXP Pro. I can successfully use the Eval function and get it to call any function with...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
1
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.