[OGo-Developer] stuffing an NSArray into a NSMutableDictionary
Rafel Amer Ramon
developer@opengroupware.org
Tue, 24 Apr 2007 14:46:45 +0200
This is a multi-part message in MIME format.
--------------030605040303000004020300
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
En/na Sebastian Reitenbach ha escrit:
> Hi Rafel,
> I had to change the
>
> temparray = [[queuesdict objectForKey:[[event objectForKey:@"Queue"]
> objectForKey:@"Agents"]];
>
> to let it compile, but then it ended up in an exception (Some
> NSConcrete8BitString does not recognize objectForKey) while running and I
> enter the AsteriskUI in OGo. Then I tried to replace my shuffling around
> with temporary variables where I put the queuesdict into the
> self->multipleReturn, your version:
>
> [self->multipleReturn release];
> self->multipleReturn = nil;
> self->multipleReturn = [[queuesdict allValues] retain];
>
> mixed the array completely up, My webUI expects an array, and the
> repetitions made it looking funny ;)
> my version of it below, but just only for one queue:
>
> [queuesdict takeValue:[membersarray copy] forKey:@"Agents"];
> NSMutableArray *tmparray;
> tmparray = [[NSMutableArray alloc] init];
> [tmparray addObject:queuesdict];
> [self->multipleReturn removeAllObjects];
> ASSIGN(self->multipleReturn, [tmparray copy]);
>
> nevertheless, thanks for taking time.
>
> kind regards
> Sebastian
>
Hi Sebastian,
I send you the program with my latest tries. I think it works even
if the initial values of self->multipleReturn are not ordered
You have to compile the program try.m with
gcc -o try -lFoundation try.m
Kind regards,
Rafel
--
Aquest missatge ha estat analitzat per MailScanner
a la cerca de virus i d'altres continguts perillosos,
i es considera que està net.
For all your IT requirements visit: http://www.transtec.co.uk
--------------030605040303000004020300
Content-Type: text/plain;
name="input.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="input.txt"
(
{
Abandoned = " 0";
Calls = " 0";
Completed = " 0";
Event = " QueueParams";
Queue = " l00-bugdead-prods-queue";
},
{
Abandoned = " 0";
Calls = " 0";
Event = " QueueMember";
Location = " Agent/202";
Queue = " l00-bugdead-prods-queue";
},
{
Abandoned = " 0";
Calls = " 0";
Event = " QueueMember";
Location = " Agent/303";
Queue = " l00-bugdead-prods-queue";
},
{
Abandoned = " 0";
Calls = " 0";
Event = " QueueMember";
Location = " Agent/101";
Queue = " l11-bugdead-prods-queue";
},
{
Abandoned = " 0";
Calls = " 0";
Event = " QueueMember";
Location = " Agent/303";
Queue = " l11-bugdead-prods-queue";
},
{
Abandoned = " 0";
Calls = " 0";
Event = " QueueMember";
Location = " Agent/202";
Queue = " l11-bugdead-prods-queue";
},
{
Abandoned = " 0";
Calls = " 0";
Completed = " 0";
Event = " QueueParams";
Queue = " l11-bugdead-prods-queue";
}
);
--------------030605040303000004020300
Content-Type: text/x-objcsrc;
name="try.m"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="try.m"
#include <Foundation/Foundation.h>
@interface StuffingArray : NSObject
{
NSArray *multipleReturn;
}
- (NSArray *)multipleReturn;
- (NSArray *)getQueues;
@end
@implementation StuffingArray
- (id)init {
NSData *data;
NSString *contents;
data = [NSData dataWithContentsOfFile:@"input.txt"];
contents = [[NSMutableString alloc] initWithData:data
encoding:NSISOLatin1StringEncoding];
self->multipleReturn = [contents propertyList];
return self;
}
- (void)dealloc {
[self->multipleReturn release];
[super dealloc];
}
- (NSArray *)getQueues {
NSEnumerator *e;
NSMutableDictionary *queuesdict;
NSMutableArray *queuesarray;
id event;
queuesdict = [[NSMutableDictionary alloc] init];
queuesarray = [[NSMutableArray alloc] init];
e = [self->multipleReturn objectEnumerator];
while ((event = [e nextObject]) != nil) {
NSString *queue;
NSMutableDictionary *tempdict;
NSMutableArray *temparray;
queue = [event objectForKey:@"Queue"];
/*
First, if needed, we initialize the dictionary queuesdict with
an empty dictionary for the key queue. For that dictionary,
we initialize the key "Agents" with an empty array.
*/
if([queuesdict objectForKey:queue] == nil) {
temparray = [[NSMutableArray alloc] init];
tempdict = [[NSMutableDictionary alloc] init];
[tempdict setObject:[temparray retain] forKey:@"Agents"];
[queuesdict setObject:[tempdict retain] forKey:queue];
}
/*
Now whe are sure that the values are initialized,
we get that values
*/
tempdict = [queuesdict objectForKey:queue];
temparray = [tempdict objectForKey:@"Agents"];
/*
Finally, we assign values.
The queuesarray is used to get the order in which the
QueueParams appears, so that we can preserve ordering.
*/
if ([[event objectForKey:@"Event"] hasSuffix:@" QueueParams"]) {
[tempdict addEntriesFromDictionary:event];
[queuesarray addObject:queue];
} else {
[temparray addObject:event];
}
}
int k;
NSString *elem;
[self->multipleReturn release];
self->multipleReturn = nil;
/*
Now we replace the values of queuesarray for the values
of queuesdict, so that we get the final array.
*/
for(k=0;k<[queuesarray count];k++) {
elem = [queuesarray objectAtIndex:k];
[queuesarray replaceObjectAtIndex:k withObject:[queuesdict objectForKey:elem]];
}
self->multipleReturn = [queuesarray retain];
return self->multipleReturn;
}
- (NSArray *)multipleReturn {
return self->multipleReturn;
}
@end
int main(int argc, char **argv, char **env) {
NSAutoreleasePool *pool;
StuffingArray *stuffing;
NSArray *out;
[NSProcessInfo initializeWithArguments:argv count:argc environment:env];
pool = [NSAutoreleasePool new];
stuffing = [[StuffingArray alloc] init];
out = [stuffing getQueues];
NSLog(@"HHHHHHHHHHHHH %@",[stuffing multipleReturn]);
exit(0);
}
--------------030605040303000004020300--