Lines 100-105
sub resources {
Link Here
|
100 |
return Koha::ERM::EHoldings::Resources->_new_from_dbic($resources_rs); |
100 |
return Koha::ERM::EHoldings::Resources->_new_from_dbic($resources_rs); |
101 |
} |
101 |
} |
102 |
|
102 |
|
|
|
103 |
=head3 _detect_delimiter_and_quote |
104 |
|
105 |
Identifies the delimiter and the quote character used in the KBART file and returns both. |
106 |
|
107 |
=cut |
108 |
|
109 |
sub _detect_delimiter_and_quote { |
110 |
my ($file) = @_; |
111 |
my $sample_lines = 5; # Number of lines to sample for detection |
112 |
|
113 |
open my $fh, '<', \$file or die "Could not open '$file': $!"; |
114 |
|
115 |
my @lines; |
116 |
while (<$fh>) { |
117 |
push @lines, $_; |
118 |
last if $. >= $sample_lines; |
119 |
} |
120 |
close $fh; |
121 |
|
122 |
my %delimiter_count; |
123 |
my %quote_count; |
124 |
|
125 |
foreach my $line (@lines) { |
126 |
foreach my $char ( ',', '\t', ';', '|' ) { |
127 |
my $count = () = $line =~ /\Q$char\E/g; |
128 |
$delimiter_count{$char} += $count if $count; |
129 |
} |
130 |
foreach my $char ( '"', "'" ) { |
131 |
my $count = () = $line =~ /\Q$char\E/g; |
132 |
$quote_count{$char} += $count if $count; |
133 |
} |
134 |
} |
135 |
|
136 |
# Guess the delimiter with the highest count |
137 |
my ($delimiter) = sort { $delimiter_count{$b} <=> $delimiter_count{$a} } keys %delimiter_count; |
138 |
|
139 |
# Guess the quote character with the highest count |
140 |
my ($quote) = sort { $quote_count{$b} <=> $quote_count{$a} } keys %quote_count; |
141 |
|
142 |
# Fallback to common defaults if nothing is detected |
143 |
$delimiter //= ','; |
144 |
$quote //= '"'; |
145 |
|
146 |
return ( $delimiter, $quote ); |
147 |
} |
148 |
|
103 |
=head2 Internal methods |
149 |
=head2 Internal methods |
104 |
|
150 |
|
105 |
=head3 _type |
151 |
=head3 _type |
106 |
- |
|
|